mongodb - 移动 meteor 应用程序 - 计算附近的位置并存储为可分类的集合

标签 mongodb meteor geo

我正在组合一个移动 meteor 应用程序,我想用它来列出本地(比如 20 英里半径范围内)的便利设施。我收集了这些设施和相应的 latlng 数据——我希望能够将应用程序传递给我当前的位置(使用 Cordova)并生成一个排序最接近的列表(/collection?)。

我有两个具体问题,非常感谢您的建议!

我可以为此使用 mongo 的 $near 还是应该使用 node.js 插件(例如 'GeoLib' - https://github.com/manuelbieh/geolib )来进行距离计算?

如何生成这些位置的临时(本地存储)集合以显示在我的列表中?大概如果我不使用 $near 我必须遍历我的位置,计算所有位置的距离,然后返回距离低于某个阈值的任何位置,但这似乎很昂贵当我的位置列表越来越多时,这样做的方法。

对不起,这是我第一次尝试这样的事情;非常感谢经验丰富的开发人员提供的任何建议!

编辑 - 我的代码(为什么它不起作用?!)

我将这样的位置存储在一个集合中:

Beaches.insert({ 名称:'威尼斯海滩 CA', 几何学: { 类型:“点”, 坐标:[-118.473314,118.473314] } });

...

Beaches._ensureIndex({'geometry.coordinates':'2d'}, function(err, result) { 如果(错误)返回控制台.dir(错误); });

我正在像这样查询这些条目(传入 lat 和 lng):

getNearBeaches = function(lng,lat) { 返回 Beaches.find({'geometry.coordinates': { $近:{ $几何:{ 类型:“点”, 坐标:[lng,lat] } }, $maxDistance: 20000//米 } }) };

我可以直接使用 find() 列出我的收藏,但我的位置搜索没有返回任何内容,即使我将 $maxDistance 设置为一个巨大的数字,或者直接搜索已经存储的一组坐标.

我做错了什么??

最佳答案

您可以获取当前位置,将其发送到服务器并订阅集合,由mongodb过滤$near:

Meteor.subscribe("amenities", {latlng: Session.get("latlng")});

还有这样的:

Meteor.publish("amenities", function (latlng) {
   return Amenities.find({
      location: {
        $near: {
          $geometry: {
            type: "Point",
            coordinates: latlng
          },
          $maxDistance: 20000   //meters
        }
      }
    });
});

您必须具有正确的数据类型和索引。和字段 location (-:

关于mongodb - 移动 meteor 应用程序 - 计算附近的位置并存储为可分类的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23490264/

相关文章:

Elasticsearch geo_bounding_box 过滤器返回 0 个结果

python - MongoDB 和 PyMongo - 类似 SQL 的列

android - 地理点与位置

node.js - 如何使用mongodb和AWS存储文件

meteor + react : Server side routes?

reactjs - 获取react-geosuggest输入字段的输入值

javascript - 带有特殊符号自动完成功能的自由文本输入

r - 从坐标生成多边形

java - 如何从数据库服务器插入带有时间戳的 MongoDB 文档

c# - 如何通过 GUID _id 查找文档?