2016-02-07 102 views
0

我當時正在玩貓鼬和地理空間搜索,以及後面的教程和閱讀這裏的東西,我仍然不能解決問題。貓鼬地理空間搜索:距離不起作用

我的架構:

var mongoose = require("mongoose"); 
var Schema = mongoose.Schema; 

var LocationSchema = new Schema({ 
    name: String, 
    loc: { 
     type: [Number], // [<longitude>, <latitude>] 
     index: '2dsphere'  // create the geospatial index 
    } 
}); 
module.exports = mongoose.model('Location', LocationSchema); 

我(POST)路線:

router.post('/', function(req, res) { 

    var db = new locationModel(); 
    var response = {}; 

    db.name = req.body.name; 
    db.loc = req.body.loc; 
    db.save(function(err) { 
     if (err) { 
      response = { 
       "error": true, 
       "message": "Error adding data" 
      }; 
     } else { 
      response = { 
       "error": false, 
       "message": "Data added" 
      }; 
     } 
     res.json(response); 
    }); 
}); 

我(GET)路線:

router.get('/', function(req, res, next) { 
    var limit = req.query.limit || 10; 

    // get the max distance or set it to 8 kilometers 
    var maxDistance = req.query.distance || 8; 

    // we need to convert the distance to radians 
    // the raduis of Earth is approximately 6371 kilometers 
    maxDistance /= 6371; 

    // get coordinates [ <longitude> , <latitude> ] 
    var coords = []; 
    coords[0] = req.query.longitude; 
    coords[1] = req.query.latitude; 

    // find a location 
    locationModel.find({ 
     loc: { 
      $near: coords, 
      $maxDistance: maxDistance 
     } 
    }).limit(limit).exec(function(err, locations) { 
     if (err) { 
      return res.json(500, err); 
     } 

     res.json(200, locations); 
    }); 
}); 

我能夠存儲在數據庫中的位置,但每當我嘗試搜索一個位置時,距離查詢參數都不起作用。例如,如果我搜索距離數據庫200米遠的地方,即使放置距離= 1(KM),我也不會得到結果,但如果我放置300(公里)這樣的東西,我會得到一些結果。距離根本不匹配。

我在做什麼錯?

感謝

回答

2

我能解決它這種方式閱讀文檔:

指數:「2dsphere」需要此查詢:

$near : 
     { 
     $geometry: { type: "Point", coordinates: [ <lng>, <lat> ] }, 
     $minDistance: <minDistance>, 
     $maxDistance: <maxDistance> 
     } 
} 

,並沒有這一條,其意思是用於傳統索引:'2d':

loc: { 
    $near: [<lng>, <lat>], 
    $maxDistance: <maxDistance> 
} 

我希望這會幫助別人:)