node.js - SailsJS geoNear 问题

标签 node.js geolocation sails.js sails-mongo

我在让 geoNear 在 SailsJS 中工作时遇到了很多麻烦。

在我的 UserController.js 中,我尝试对用户模型中的 location 字段进行 geoNear 查询。它被定义为带有 2d 索引的 JSON。以下是字段数据的示例:

“位置”:{“类型”:“点”,“坐标”:[42.8003,-73.8808]}

在我的 UserController 中,我的 geoSearch 方法如下所示:

 geoSearch: function(req, res) {
    //sails.log.verbose(req);
    var lat = req.param('lat');
    var lng = req.param('long');
    var limit = req.param('limit') || 50;
    var maxDistance = req.param('radius') || 5000; //meters
    sails.log.verbose('lat : ' + lat);
    sails.log.verbose('lng : ' + lng);
    sails.log.verbose('limit : ' + limit);
    sails.log.verbose('maxDistance : ' + maxDistance);
    if (!(lat && lng)) {
        //bad stuff
        res.badRequest('Missing lat or long!');
    } else {
        User.native(function(err, collection) {
          collection.geoNear(lng, lat, {
                    limit: limit,
                    maxDistance: maxDistance, // in meters
                    query: {}, // allows filtering
                    distanceMultiplier: 3959, // converts radians to miles (use 6371 for km)
                    spherical : true
          }, function(mongoErr, users) {
                  if (mongoErr) {
                      console.error(mongoErr);
                      res.send('_geoSearch failed with error='+mongoErr);
                  } else {
                      console.log('users=',users);
                      res.json(users.results);
                    }
             });
        });
    }
}

但是,当我提出如下请求时:

http://localhost:1337/api/user/location/?lat=42.8003&long=-73.8808

我得到输出:

verbose: lat : 42.8003
verbose: lng : -73.8808
verbose: limit : 50    
verbose: maxDistance : 5000
{ [MongoError: exception: 'near' field must be point]
  name: 'MongoError',
  errmsg: 'exception: \'near\' field must be point',
  code: 17304,
  ok: 0 }

我已经为此苦苦挣扎了很长一段时间,任何帮助或指导将不胜感激。

其他信息:

MongoDB ~3.0 SailsJS ~0.10

https://github.com/mongodb/node-mongodb-native/blob/dd7bb687749ffab6ec4c4a6b052ef2cdffc0d780/lib/mongodb/collection.js#L1446

http://docs.mongodb.org/manual/reference/command/geoNear/

最佳答案

我也遇到了同样的问题,原因是:

However, when I make a request such as:

http://localhost:1337/api/user/location/?lat=42.8003&long=-73.8808

因此,当服务器端接收到数据时,它会转换为“字符串”。 尝试这个来解决它:

    var latitude = parseFloat(req.param('lat'));
    var longitude = parseFloat(req.param('long'));

希望这会有所帮助。

关于node.js - SailsJS geoNear 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28845089/

相关文章:

node.js - 在 sailjs 上实现 https 服务器

node.js - 如何使用 sails js + vue js 模板制作应用程序?

java - Location.convert() 是否生成以逗号作为分隔符的值?

android - 如何计算到地点的距离和时间

javascript - 更改 sails.js EJS View 以使用 .html 扩展名而不是 .ejs 扩展名?

javascript - sails.js:如何禁用 etag

node.js - 如何在sqlite nodejs select查询中获取整个结果集?

javascript - Node.js Cheerio 模块 ge

javascript - Node.js redis pub/sub 丢失消息

python - 无法使用推文 [Lat-Lon] 抓取地理坐标