从另一个和一个距离获取地理坐标

时间:2015-04-02 15:53:10

标签: javascript node.js mongodb mongoose

我想从我的mongoDb中检索某个距离范围内的每个点。每个元素以这种方式存储其位置:[纬度,经度]纬度和经度是浮点值。

Ex:我希望我的数据库中的每一点都在距离[48.862586,2.352210]最多100公里

计算我的参考点和所有其他参考点之间的距离,以了解它在极限距离下是否听起来不是一个好主意......有没有办法去问谷歌地图API或其他人(或者我自己) )这样做?

2 个答案:

答案 0 :(得分:1)

感谢@AllanNienhuis,他让我领先。我使用Node.js + Mongoose的解决方案:

在Event.js中:

var mongoose = require('mongoose');
var EventSchema = new mongoose.Schema({
    name: String,
    pos : [Number],
    type: String
});
EventSchema.index({ pos : '2dsphere' });
module.exports = mongoose.model('Event', EventSchema);

在eventController.js

exports.near = function(req, res) {
    var point = JSON.parse(req.body.point);
    var max = parseInt(req.body.max);
    console.log(point);

    Event.geoNear(point.pos, { spherical : true, maxDistance : max }, function (err, results, stats) {
        if (err) res.json(JsonResponse.get(Code.generic_error, {error: err}));
        else res.json(JsonResponse.get(Code.valid, results ));
    });
};

像魅力一样!

答案 1 :(得分:0)

我会将此标记为mongodb问题。

Mongodb支持地理空间功能:http://blog.mongolab.com/2014/08/a-primer-on-geospatial-data-and-mongodb/

根据您使用的mongo版本,它可能很简单:

db.places.find( { loc : 
                  { $near : [ 100 , 100 ],
                    $maxDistance: 10 }
                } )

较新的geoJSON功能看起来非常棒 - 我自己没有时间玩它,但它看起来非常灵活。我喜欢能够在DB层处理任意多边形内找到元素。 :)