Docs Menu
Docs Home
/
データベース マニュアル
/ / / / /

球体上の円内のロケーションのクエリ

項目一覧

  • このタスクについて
  • 始める前に
  • 手順
  • 詳細

球体上の円内のロケーション データをクエリできます。 これらのクエリを使用して、 球面上限内のデータを返します。

球体上の円内のロケーション データをクエリするには、 $geoWithin$centerSphere演算子を使用します。 $centerSphere演算子で、クエリする円の座標と半径を指定します。

db.<collection>.find( {
<location field> : {
$geoWithin : {
$centerSphere: [
[ <longitude>, <latitude> ],
<radius>
]
}
}
} )
  • 経度と緯度の座標を指定する場合は、最初に経度、次に緯度を指定します。

    • 有効な経度の値は、-180 以上、180 以下です。

    • 有効な緯度の値は-90 以上、90 以下です。

  • $centerSphere演算子で、円の半径をラジアンで指定します。 他の単位をラジアンに変換したり、ラジアンから任意の値に変換するには、「球面演算子の距離をラジアンに変換する 」を参照してください。

    • この例では、距離をキロメートル単位で計算します。 キロメートルをラジアンに変換するには、キロメートルの値を6378.1で割ります。

  • $geoWithin には地理空間インデックスは必要ありません。 ただし、地理空間インデックスを使用するとクエリのパフォーマンスが向上します。 2dsphere地理空間インデックスのみが$geoWithinをサポートします。 詳細については、 「2dsphere インデックスの作成」 を参照してください。

これらのドキュメントを含むplacesコレクションを作成します。

db.places.insertMany( [
{
loc: { type: "Point", coordinates: [ -73.97, 40.77 ] },
name: "Central Park",
category : "Park"
},
{
loc: { type: "Point", coordinates: [ -73.88, 40.78 ] },
name: "La Guardia Airport",
category: "Airport"
},
{
loc: { type: "Point", coordinates: [ -1.83, 51.18 ] },
name: "Stonehenge",
category : "Monument"
}
] )

コレクションをクエリするには、 $geoWithin$centerSphere演算子を使用します。

db.places.find( {
loc: {
$geoWithin: {
$centerSphere: [
[ -1.76, 51.16 ],
10 / 6378.1
]
}
}
} )

クエリは、 locフィールドが経度-1.76 、緯度51.16の点の 10 キロメートル以内にあるドキュメントを返します。

出力:

[
{
_id: ObjectId("63fd205e4a08b5e248c03e32"),
loc: { type: 'Point', coordinates: [ -1.83, 51.18 ] },
name: 'Stonehenge',
category: 'Monument'
}
]

戻る

交差