移动流星应用程序 - 计算附近的位置并存储为可排序的集合

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的搜索.

我做错了什么?

non*_*one 7

您可以获取当前位置,将其发送到服务器并订阅集合,由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( - :