$GeoWithin
定義
$geoWithin
指定した形状内に完全に存在する地理空間データを含むドキュメントを選択します。
指定されるシェイプは、GeoJSON
Polygon
(単一リングまたは複数リング)、GeoJSONMultiPolygon
、または legacy 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
の場合、単一の半球よりも大きい面積を持つ単一リングの多角形を指定する場合は、 $geometry
式にカスタム MongoDB 座標参照システムを含めます。それ以外の場合、 $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" } } } } } } )