2dsphere
インデックス のクエリ
次のセクションでは、 2dsphere
インデックスでサポートされているクエリについて説明します。
多角形に囲まれた GeoJSON オブジェクト
$geoWithin
演算子は、GeoJSON 多角形内にあるロケーション データをクエリします。 位置データは GeoJSON 形式で保存する必要があります。 次の構文を使用します。
db.<collection>.find( { <location field> : { $geoWithin : { $geometry : { type : "Polygon" , coordinates : [ <coordinates> ] } } } } )
次の例では、GeoJSON 多角形内に完全に存在するすべてのポイントとシェイプを選択します。
db.places.find( { loc : { $geoWithin : { $geometry : { type : "Polygon" , coordinates : [ [ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ] ] } } } } )
GeoJSON オブジェクトの交差
$geoIntersects
演算子は、指定された GeoJSON オブジェクトと交差するロケーションをクエリします。 交差する空でない場合、ロケーションはオブジェクトと交差します。 これには、共有エッジを持つドキュメントが含まれます。
$geoIntersects
演算子は、次の構文を使用します。
db.<collection>.find( { <location field> : { $geoIntersects : { $geometry : { type : "<GeoJSON object type>" , coordinates : [ <coordinates> ] } } } } )
次の例では、 $geoIntersects
を使用して、 coordinates
配列で定義された多角形と交差するすべてのインデックス付きポイントとシェイプを選択します。
db.places.find( { loc : { $geoIntersects : { $geometry : { type : "Polygon" , coordinates: [ [ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ] ] } } } } )
GeoJSON ポイントへの近接性
近接クエリは、定義された点に最も近い点を返し、結果を距離順にソートします。 GeoJSON データの近接クエリには2dsphere
インデックスが必要です。
GeoJSONポイントへの近接性をクエリするには、 $near
演算子のいずれかを使用します。 距離はメートル単位です。
$near
は次の構文を使用します。
db.<collection>.find( { <location field> : { $near : { $geometry : { type : "Point" , coordinates : [ <longitude> , <latitude> ] } , $maxDistance : <distance in meters> } } } )
例については、 $near
を参照してください。
$nearSphere
演算子と$geoNear
集計パイプライン ステージも参照してください。
球体上で定義された円内の点
球体上の「球面上限」内のすべてのグリッド座標を選択するには、 演算子とともに$geoWithin
$centerSphere
を使用します。以下を含む配列を指定します。
円の中心点のグリッド座標
ラジアンで測定された円の半径。 ラジアンを計算するには、「球面ジオメトリを使用して距離を計算する 」を参照してください。
次の構文を使用します。
db.<collection>.find( { <location field> : { $geoWithin : { $centerSphere : [ [ <x>, <y> ] , <radius> ] } } } )
次の例では、グリッド座標をクエリし、経度88 W
と緯度30 N
の 10 マイル以内にあるすべてのドキュメントを返します。 この例では、距離 10 マイルを地球のおおよその等価半径(3963.2 マイル)で割ってラジアンに変換します。
db.places.find( { loc : { $geoWithin : { $centerSphere : [ [ -88 , 30 ] , 10 / 3963.2 ] } } } )