查询多边形 $geowithin $box mongodb 没有 return 任何东西

Query polygons $geowithin $box mongodb doesn't return anything

伙计们,我正在尝试通过边界框查询内部的所有多边形,但它只是 returns 0.. 它应该返回许多多边形!

或者,我尝试查询一个更大的边界框,但没有任何反应!

我的查询是:

{
 geometry: 
    { $geoWithin: 
        { $box:  
            [ [-73.995762,40.764826], [-73.934034,40.802038] ] 
        } 
    }                       
}

请注意,同一个查询 returns 是 Point

类型几何的有效结果

to query all the polygons inside by bounding box but it simply returns 0

$box operator for $geoWithin only supports documents based on grid coordinates and does not support GeoJSON 形状格式。

the very same query returns a valid result for geometries of type Point

根据您的文档结构以及您查询它们的方式,这可能被视为网格坐标,即 {geometry: [<long>, <lat>]} 这可能不适用于您的多边形文档,因为 GeoJSON Polygons 需要额外的数组包装器。即 [[ [<long>, <lat>] ]] 使网格坐标格式无效。

如果您的文档是 GeoJSON 格式,并且您想要 select 一个区域,您可以使用 $geometry

db.places.find(
   {
     'geometry': {
       $geoWithin: {
          $geometry: {
             type : "Polygon" ,
             coordinates: [ [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] ]
          }
       }
     }
   }
)

值得注意的是,MongoDB Compass 地理空间可视化当前 (v1.6) 尚不支持 GeoJSON。

答案如下:

$box 可以使用 GeoJSON,但不能使用多边形!您需要使用 $box 生成一个几何图形。

此外,它总是必须有起点和点,所以一个 4 点多边形将有 5 个坐标元组

但它变得更棘手,它必须遵循右手法则(逆时针方向)。

使用 $BOX 和点测试 GEOJSON

我的查询:

{ 
  geometry: { 
    $geoWithin: { 
      $box: [ 
        [ -71.934034, 38.764826 ], 
        [ -75.995762, 43.802038 ] 
      ] 
    } 
  }
}