我正在尝试实施搜索功能,搜索某个位置的位置以及距离此位置之外的距离。
这是我到目前为止:(使用Meteor)
Places.find({
location: {
$geoWithin: {
$geometry: {
type: 'Polygon',
coordinates: [[[-3.2714903,51.4671222], ... ]]
}
}
}
}).fetch();
这会正确找到这个多边形内的所有地方......但我也希望能够找到距离它3英里的地方(希望这是有意义的)
我希望能够在$ near
上实现类似$ maxDistance选项的功能希望有人能指出我正确的方向,谢谢
答案 0 :(得分:0)
不同版本的MongoDB支持不同的地理索引和查询选项。 Meteor过去只支持较旧的MongoDB版本(1.0.4之前)。我不得不尝试不同的方法,这是自Meteor 0.9以来对我有用的东西:
var query = {
loc: {
$nearSphere: {
$geometry: user.watchLocation,
$maxDistance: 1000 //1 km
}
}
};
使用2dsphere索引:
Places._ensureIndex({
loc: "2dsphere"
});
以下列格式存储place.loc
属性以及user.watchlocation
:
place.loc = {
type: "Point",
coordinates: [pos.lng, pos.lat]
};
答案 1 :(得分:0)
你想要的是“缓冲”。向多边形添加缓冲区,然后执行$geoWithin
新的缓冲多边形。
如果该3英里范围是静态的,我建议将其保存为单独的searchRange
字段&索引那个。或者,将其卸载到客户端: - )
如果您想区分原始形状中的POI和缓冲区内的那些对原始形状的返回结果进行额外查询。由于列表应该大大减少,这里不需要索引。
这是一个简单的工具,可以帮助您入门:https://github.com/Turfjs/turf-buffer