警告
球面クエリの場合は、 2dsphereインデックス結果を使用します。
球面クエリに2dインデックスを使用すると、北極と南極が入っている球面クエリに2dインデックスを使用するなど、誤った結果が生じる可能性があります。
2dインデックスは、ユークリッド平面(平面)上の距離を計算するクエリをサポートしています。 インデックスは、球面ジオメトリを使用して距離を計算する次のクエリ演算子とコマンドもサポートしています。
注意
球面距離を使用する基本的なクエリは2dインデックスでサポートされていますが、データが経度と緯度が主な場合は、 2dsphereインデックスへの移行を検討してください。
$geoNearオプション付きの パイプライン ステージspherical: true
重要
上記の操作では、距離にラジアンが使用されます。 他の球面クエリ演算子$geoWithinなど)ではこの処理は実行されません。
球面クエリ演算子が正しく機能するには、距離をラジアンに変換し、ラジアンからアプリケーションで使用される距離単位に変換する必要があります。
変換するには:
ラジアンへの距離 : 距離測定と同じ単位で、距離を球体(例: 地球)の半径で割ります。
ラジアンから距離: 距離を変換する単位システムで、ラジアンの測定値に球体(例:地球)の半径を掛けます。
地球の等価半径は約3,963.2マイル、または6,378.1キロです。
次のクエリでは、中心[ -74, 40.74 ]によって記述され、半径が100マイルである円内にあるplacesコレクションからドキュメントが返されます。
db.places.find( { loc: { $geoWithin: { $centerSphere: [ [ -74, 40.74 ] , 100 / 3963.2 ] } } } )
注意
重要
緯度と経度の座標を指定する場合は、最初に経度、次に緯度を指定します。
有効な経度の値は、
-180以上、180以下です。有効な緯度の値は
-90以上、90以下です。