$geoIntersects
定义
$geoIntersects
选择地理空间数据与指定 GeoJSON对象相交的文档;即 其中数据与指定对象的交集为非空。
$geoIntersects
操作符使用$geometry
操作符来指定GeoJSON对象。 要使用默认坐标参考系 (CRS) 指定 GeoJSON 多边形或多边形多边形,请使用以下语法:{ <location field>: { $geoIntersects: { $geometry: { type: "<GeoJSON object type>" , coordinates: [ <coordinates> ] } } } } 对于指定面积大于单个半球的 GeoJSON 几何图形的
$geoIntersects
查询,使用默认 CRS 会生成对互补几何图形的查询。要使用自定义 MongoDB CRS 指定单环 GeoJSON 多边形,请在
$geometry
表达式中使用指定自定义 MongoDB CRS 的原型:{ <location field>: { $geoIntersects: { $geometry: { type: "Polygon" , coordinates: [ <coordinates> ], crs: { type: "name", properties: { name: "urn:x-mongodb:crs:strictwinding:EPSG:4326" } } } } } } 自定义 MongoDB CRS 使用逆时针绕组顺序,并允许
$geoIntersects
支持使用单环 GeoJSON 多边形(其面积大于或等于单个半球)的查询。如果指定的多边形小于单个半球,则使用 MongoDB CRS 的$geoIntersects
的行为与使用默认 CRS 的行为相同。另请参阅“大型”多边形。重要
如果指定纬度和经度坐标,则先列出经度,然后列出纬度。
有效经度值介于
-180
和180
之间,两者均包括在内。有效纬度值介于
-90
和90
之间,两者均包括在内。
行为
地理空间索引
$geoIntersects
使用球面几何。$geoIntersects
不需要地理空间索引。但是,地理空间索引可提高查询性能。只有 2dsphere 地理空间索引支持 $geoIntersects
。
退化几何图形
$geoIntersects
不保证它会考虑多边形与其自己的边相交;它自己的顶点;或另一个共享顶点或边但没有内部空间的多边形。
“大”多边形
对于 $geoIntersects
,如果您指定的单环多边形的面积大于单半球,请在 $geometry
表达式中包含自定义 MongoDB 坐标参考系。否则,$geoIntersects
将查询互补几何体。对于面积大于半球的所有其他 GeoJSON 多边形,$geoIntersects
会查询互补几何图形。
示例
与多边形相交
以下示例使用 $geoIntersects
来选择与 coordinates
数组定义的 Polygon
相交的所有 loc
数据。多边形的面积小于单半球的面积:
db.places.find( { loc: { $geoIntersects: { $geometry: { type: "Polygon" , coordinates: [ [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] ] } } } } )
对于面积大于单个半球的单环多边形,请参阅与“大型”多边形相交。
与“大”多边形相交
如需使用面积大于单个半球的单环 GeoJSON 多边形进行查询,$geometry
表达式必须指定自定义 MongoDB 坐标参考系。例如:
db.places.find( { loc: { $geoIntersects: { $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" } } } } } } )