Bel*_*dio 5 geo mongodb meteor
我正在整理一个移动流星应用程序,我想用它来列出本地(比如半径20英里范围内)的便利设施.我有这些设施和相应的经纬度数据收集 - 我希望能够通过我的当前位置(使用科尔多瓦)的应用程序,并生成一个列表(/集?)是最接近排序第一.
我有两个具体的问题,我真的很感激一些建议!
我可以使用蒙戈的$near这个或我应该使用Node.js的插件(例如,"GeoLib" - https://github.com/manuelbieh/geolib)做距离计算?
如何生成这些位置的临时(本地存储)集合以显示在我的列表中?据推测,如果我不使用$near我必须遍历我的位置,计算所有这些位置的距离,然后返回距离低于某个阈值的任何地方,但这似乎是一种昂贵的方式,当我的位置列表将成长和成长.
对不起,这是我第一次尝试这样的事情; 我非常感谢来自经验丰富的开发人员的任何建议!
编辑 - 我的代码(为什么不工作?!)
我将这样的位置存储在一个集合中:
Beaches.insert({
name: 'Venice Beach CA',
geometry: {
type: "Point",
coordinates: [-118.473314,118.473314]
}
});
...
Beaches._ensureIndex({'geometry.coordinates':'2d'}, function(err, result) {
if(err) return console.dir(err);
});
我正在查询这些条目(传入lat和lng):
getNearBeaches = function(lng,lat) {
return Beaches.find({'geometry.coordinates':
{
$near: {
$geometry: {
type: "Point",
coordinates: [lng,lat]
}
},
$maxDistance: 20000 //meters
}
})
};
我可以列出我的收藏与直find(),但我的位置搜索没有返回,即使我设置$ maxDistance到一个巨大的数字,或直接在已存储的一组COORDS的搜索.
我做错了什么?
您可以获取当前位置,将其发送到服务器并订阅集合,由mongodb过滤$near:
Meteor.subscribe("amenities", {latlng: Session.get("latlng")});
Run Code Online (Sandbox Code Playgroud)
并且像这样:
Meteor.publish("amenities", function (latlng) {
return Amenities.find({
location: {
$near: {
$geometry: {
type: "Point",
coordinates: latlng
},
$maxDistance: 20000 //meters
}
}
});
});
Run Code Online (Sandbox Code Playgroud)
您必须具有正确的数据类型和索引.和田地location( - :
| 归档时间: |
|
| 查看次数: |
1258 次 |
| 最近记录: |