如何返回离地理位置最近的文件?

Posted

技术标签:

【中文标题】如何返回离地理位置最近的文件?【英文标题】:How to return documents closest to a geographical location? 【发布时间】:2014-02-25 14:53:30 【问题描述】:

我想显示最接近用户在流星中输入的地理位置的帖子。

用户在 addpost 模板上添加帖子:

     //events.js (this code works nicely)

Template.addpost.events (
    'click .add': function (evt, tmpl) 
         var title = tmpl.find('.title').value;
         var lat = tmpl.find('.address-lat').value;
         var long = tmpl.find('.address-long').value;
         var loc = lat , long
         Post.insert(title:title,loc:loc);

)

然后用这段代码显示在主页上:

    //main.js (this works)

Post = new Meteor.Collection("posts");

Template.main.posts = function() 
    return Post.find();

和 html:

(this works)

#each posts
    <tr>
        <td>title</td>
    </tr>
/each

现在我的问题是:我如何过滤这些帖子,并为用户指定的纬度和经度显示最接近的 100?

(可以在此处找到 mondodb 代码:http://docs.mongodb.org/manual/reference/operator/query/near/)

【问题讨论】:

【参考方案1】:

文档建议$near 将结果从最近到最远排序。因此,您可以在服务器(发布时)或客户端(如果您已经拥有所有记录)上执行以下操作:

Template.main.posts = function () 
    var totalRecords = Post.find().count();
    return Post.find(
            loc : 
                $near : 
                    $geometry :  
                        type : "Point",
                        coordinates: [ userLocLong, userLocLat ] 
                     
                 
             
        ,  
            limit: 100  // Return only the nearest 100 results
        
    );
;

来自 OP 的说明:

代码确实有效。刚发现需要将这种格式的坐标添加到posts集合中:

Post.insert(

        loc: 
                  type: "Point",
                  coordinates: [foo, bar],
             
    );

【讨论】:

不适合我。应用程序崩溃:/。 => Exited with code: 8 => 你的应用程序正在崩溃。等待文件更改。 => 修改 -- 重新启动。 @GeriTol 恐怕没有足够的信息来开始调试。

以上是关于如何返回离地理位置最近的文件?的主要内容,如果未能解决你的问题,请参考以下文章

找到离我当前位置最近的标记

Google API 从位置列表中检测离用户最近的位置

离点最近的 CloudKit 位置

MySQL位置选择查询在存储过程中返回0

距 JSON 列最近的位置

Sequelize 地理空间查询:找到距某个位置最近的“n”个点