文档菜单
文档首页
/
MongoDB 手册
/ / / /

$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相同。另请参阅"大"多边形。

重要

在指定经纬度坐标时,先列出 经度,然后是 纬度

  • 有效的经度值在 -180180 之间,两者都包括。

  • 有效的纬度值在 -9090 之间,两者都包括。

$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" }
}
}
}
}
}
)

返回

地理空间查询

本页内容