Mongodb Mongo中$center和$centerSphere之间的差异?

Mongodb Mongo中$center和$centerSphere之间的差异?,mongodb,geospatial,geo,Mongodb,Geospatial,Geo,目前,我们正在使用$centerSphere查找附近的城市。一个例子是,对于美国得克萨斯州的当地蜜蜂洞,$centerSphere正确地找到了半径30公里内唯一的城市奥斯汀(根据文档,它被转换为弧度)。现在,对于斐济的劳托卡市(纬度:-17.6169618,长:177.4504609),它给出了错误“球面距离需要(未实现)包裹”。这是问题一:这个错误意味着什么 我们尝试使用$center实现同样的功能。我知道我们需要以英里而不是弧度来表示距离。在实施之后,为了蜜蜂洞,我为我们找到了数千或数百英里

目前,我们正在使用$centerSphere查找附近的城市。一个例子是,对于美国得克萨斯州的当地蜜蜂洞,$centerSphere正确地找到了半径30公里内唯一的城市奥斯汀(根据文档,它被转换为弧度)。现在,对于斐济的劳托卡市(纬度:-17.6169618,长:177.4504609),它给出了错误“球面距离需要(未实现)包裹”。这是问题一:这个错误意味着什么

我们尝试使用$center实现同样的功能。我知道我们需要以英里而不是弧度来表示距离。在实施之后,为了蜜蜂洞,我为我们找到了数千或数百英里以外的城市。阿尔伯克基就是一个例子。我无法理解为什么这些城市在正确遵循Mongo文档之后还会出现

我正在使用查询(德克萨斯州蜜蜂洞)


$centerSphere
无法处理大距离,尤其是如果它必须绕杆,请参见此

关于
$geointen
,它不接受以英里为单位的距离,而是接受以坐标系使用的单位测量的圆半径,因此纬度和经度根据。这将产生一个非常大的边界框,其中包括Albuquerque

您可以使用
$near
,它允许以米为单位指定半径。例如,如果将其用作测试数据:

db.places.insert( {
   name: "Bee Cave, Texas",
   location: { type: "Point", coordinates: [ -97.9524, 30.3061 ]  }
} );
db.places.insert( {
   name: "Austin, Texas",
   location: { type: "Point", coordinates: [ -97.654724, 30.210768 ]  }
} );
db.places.insert( {
   name: "Albuquerque",
   location: { type: "Point", coordinates: [ -106.621216, 35.113281 ]  }
} );

db.places.createIndex( { location: "2dsphere" } )
您可以使用系数
1609.344
编写以下查询,以将英里转换为米

db.places.find(
   {
     location:
       { $near:
          {
            $geometry: { type: "Point",  coordinates: [-97.9524, 30.3061 ] },
            $maxDistance: 20*1609.344 
          }
       }
   }
)
此查询同时返回德克萨斯州的Bee Cave和德克萨斯州的Austin:

{
   "_id":ObjectId("5a7190124f0cd7075d349bbc"),
   "name":"Bee Cave, Texas",
   "location":{
      "type":"Point",
      "coordinates":[
         -97.9524,
         30.3061
      ]
   }
}{
   "_id":ObjectId("5a7190124f0cd7075d349bbd"),
   "name":"Austin, Texas",
   "location":{
      "type":"Point",
      "coordinates":[
         -97.654724,
         30.210768
      ]
   }
}

所以我必须给出距离的弧度,当它总是在地球内部的时候?他们没有在$center的文档中指定相同的内容。至少对于$centerSphere,他们明确规定我们必须使用弧度。我仍然感到困惑。这是为$center编写的:“下面的示例查询返回所有文档,这些文档的坐标位于以[-74,40.74]为中心的圆圈内,半径为10”。它只是说半径为10。没有提到任何单位。“圆的半径,以坐标系使用的单位测量。”这是您的情况下的纬度和经度,与您的结果相匹配(德克萨斯州阿尔伯克基-->Bee Cave),我更新了我的答案,以说明如何使用
$near
{
   "_id":ObjectId("5a7190124f0cd7075d349bbc"),
   "name":"Bee Cave, Texas",
   "location":{
      "type":"Point",
      "coordinates":[
         -97.9524,
         30.3061
      ]
   }
}{
   "_id":ObjectId("5a7190124f0cd7075d349bbd"),
   "name":"Austin, Texas",
   "location":{
      "type":"Point",
      "coordinates":[
         -97.654724,
         30.210768
      ]
   }
}