定義
$geoWithin指定した形状内に完全に存在する地理空間データを含むドキュメントを選択します。
指定されるシェイプは、GeoJSON
Polygon(単一リングまたは複数リング)、GeoJSONMultiPolygon、またはレガシー coordinate pairs によって定義されたシェイプのいずれかになります。$geoWithin演算子は、$geometry演算子を使用して GeoJSONオブジェクトを指定します。デフォルトの座標参照システム(CRS)を使用して GeoJSON 多角形またはマルチポリゴンを指定するには、次の構文を使用します。
{ <location field>: { $geoWithin: { $geometry: { type: <"Polygon" or "MultiPolygon"> , coordinates: [ <coordinates> ] } } } } 単一の半球よりも大きい面積を持つ GeoJSON ジオメトリを指定する
$geoWithinクエリの場合、デフォルトの CRS を使用すると、補完ジオメトリのクエリが実行されます。カスタム MongoDB CRS を使用して単一リングの GeoJSON多角形を指定するには、
$geometry式でカスタム MongoDB CRS を指定する次のプロトタイプを使用します。{ <location field>: { $geoWithin: { $geometry: { type: "Polygon" , coordinates: [ <coordinates> ], crs: { type: "name", properties: { name: "urn:x-mongodb:crs:strictwinding:EPSG:4326" } } } } } } カスタム MongoDB CRS は反時計回りの巻き順序を使用し、
$geoWithinが、面積が単一の半球以上の単一リングの GeoJSON多角形を使用したクエリをサポートできるようにします。指定された多角形が単一の半球よりも小さい場合、MongoDB CRS を使用した$geoWithinの動作は、デフォルトの CRS を使用した場合と同じになります。「大きな」多角形についても参照してください。平面上の legacy coordinate pairs で定義された形状に含めるかどうかをクエリする場合は、次の構文を使用します。
{ <location field>: { $geoWithin: { <shape operator>: <coordinates> } } } 利用可能な形状演算子は次のとおりです。
$center(円を定義します)、そして$centerSphere(球面上の円を定義します)。
重要
経度と緯度を使用する場合は、
longitude, latitudeの順に座標を指定します。
動作
地理空間インデックス
$geoWithinには地理空間インデックスは必要ありません。ただし、地理空間インデックスを使用するとクエリのパフォーマンスが向上します。2 dsphereと2 d地理空間インデックスはどちらも$geoWithinをサポートしています。
ソートされていない結果
$geoWithin演算子はソートされた結果を返しません。 そのため、MongoDB は地理空間$geoWithin または$near$nearSphere クエリよりも早く クエリを返すことができ、結果はソートされます。
退化ジオメトリ
$geoWithin ジオメトリの一部がそのコンポーネント ジオメトリを含むと見なされたり、コンポーネント ジオメトリを共有する別の多角形と見なされたりすることを保証するものではありません。
"大きな" 多角形
$geoWithinの場合、単一の半球よりも大きい面積を持つ単一リングの多角形を指定する場合は、 the
custom MongoDB coordinate reference system in the $geometry式を含めます。それ以外の場合、補完ジオメトリに対して$geoWithinクエリを実行します。 半球より大きい面積を持つその他すべての GeoJSON 多角形については、 $geoWithinが補完ジオメトリを照会します。
例
多角形内
次の例では、GeoJSON Polygon 内に完全に存在するすべての loc データを選択します。多角形の面積は 1 つの半球の面積よりも小さくなります。
db.places.find( { loc: { $geoWithin: { $geometry: { type : "Polygon" , coordinates: [ [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] ] } } } } )
単一の半球よりも大きい面積を持つ単一リング多角形については、 「大きな」多角形内を参照してください。
「大きな」多角形内
単一の半球よりも大きい面積を持つ単一リングの GeoJSON 多角形でクエリを実行するには、 $geometry式でカスタム MongoDB 座標参照システムを指定する必要があります。 例:
db.places.find( { loc: { $geoWithin: { $geometry: { type : "Polygon" , coordinates: [ [ [ -100, 60 ], [ -100, 0 ], [ -100, -60 ], [ 100, -60 ], [ 100, 60 ], [ -100, 60 ] ] ], crs: { type: "name", properties: { name: "urn:x-mongodb:crs:strictwinding:EPSG:4326" } } } } } } )