【发布时间】:2022-06-15 18:52:50
【问题描述】:
我正在尝试获取用户坐标半径 5 公里内的位置,但每次我尝试时,它都显示为空。
在我的代码下方,用于定位。
const { latitude, longitude } = req.body;
const options = {
location: {
$geoWithin: { $centerSphere: [[latitude, longitude], 10 / 3963.2] },
},
};
try {
console.log(getocationAre);
res.json({
msg: "data",
size: getocationAre.length,
data: getocationAre,
});
} catch (e) {
res.json({
msg: "Error",
data: e,
});
}
【问题讨论】:
-
为此,您应该使用
$geoNear,而不是$geoWithin -
@nimrodserok 仍然无法正常工作
-
第一:
10/3963.2表示 10 英里,因此大约 16 公里,而不是 5。第二:您已反转纬度/经度。试试{ $centerSphere: [[longitude, latitude], ...最后:$geoWithin在这里可以用。 -
所以我也必须在数据库中更改它[经度,纬度] ??
-
是的!确保将坐标点存储为 [long,lat] 例如[x,y]。我很惊讶您在插入时没有收到无效的数据范围错误,但显然有许多坐标对在其中互换 long 和 lat still 会产生有效(尽管是错误的)位置。参考:mongodb.com/docs/manual/reference/operator/query/centerSphere
标签: mongodb geolocation