如何退回最接近地理位置的文件?

时间:2014-02-25 14:53:31

标签: mongodb geolocation meteor latitude-longitude

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

用户在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 个答案:

答案 0 :(得分:2)

文档建议$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],
             }
    });