0

我有一个简单的问题,我试图在我的 Node.js 服务器中查询后返回一个 MongoDB 文档:

var coords = [];
        coords[0] = req.query.valArray.lng; // client latitude
        coords[1] = req.query.valArray.lat; // client longitude
        var distanceInKM = req.query.valArray.rangeKM; // the range 
         //the query that its results i want to return by res.send()
        db.Jobs.find( { 
            $and: [ { {exp: req.query.valArray.exp} }, 
                      { field: req.query.valArray.field } 
                  ] } )

我的问题是:

  1. 如何根据req.query(exp = query.exp ) 和res.send()函数的其余参数返回文档。
  2. 如何通过坐标(坐标)和当前位置的范围进行搜索,(lng , lat)换句话说,从坐标中创建一个半径,所有匹配的作业都将作为 json 返回。
4

1 回答 1

1

你不需要重新发明轮子。您的方法不会考虑地球的曲率,因此如果距离很大,您的计算将不准确。

我会建议使用已经支持的地理空间索引MongoDB

更新

例如,您可以使用$centerSphere从中心点返回半径范围内的文档的运算符(从那里获取的示例)。

{
  <location field>: {
     $geoWithin: { $centerSphere: [ [ <x>, <y> ], <radius> ] }
     }
}

为此,您需要以GeoJSON格式存储坐标(您只需在 html5 坐标中添加一些元字段)。

于 2015-03-31T13:13:43.593 回答