$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使用逆时针的绕行顺序,并允许使用单环GeoJSON 多边形 的查询,该多边形的面积大于或等于一个半球。如果指定的多边形小于一个半球,则MongoDB CRS中$geoIntersects的行为与默认CRS相同。另请参阅"大"多边形。
重要
在指定经纬度坐标时,先列出 经度,然后是 纬度。
有效的经度值在
-180
和180
之间,两者都包括。有效的纬度值在
-90
和90
之间,两者都包括。
行为
地理空间索引
$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" } } } } } } )