Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

$geoIntersects (operador de predicado de query)

$geoIntersects

Selecciona documentos cuyos datos geoespaciales se intersectan con un/a especificado/a Objeto GeoJSON; p.ej. donde la intersección de los datos y el objeto especificado no está vacía.

La El operador $geoIntersects utiliza el operador $geometry para especificar el objeto GeoJSON. Para especificar polígonos o multipolígonos GeoJSON utilizando el sistema de referencia de coordenadas (CRS) por defecto, utiliza la siguiente sintaxis:

{
<location field>: {
$geoIntersects: {
$geometry: {
type: "<GeoJSON object type>" ,
coordinates: [ <coordinates> ]
}
}
}
}

Para $geoIntersects consultas que especifican geometrías GeoJSON con áreas mayores que un solo hemisferio, el uso del CRS por defecto da como resultado consultas para las geometrías complementarias.

Una geometría complementaria es la menor de dos geometrías. Si una geometría especificada cubre más de un hemisferio, la consulta por defecto del CRS devuelve documentos para la geometría complementaria.

Por ejemplo, si defines una geometría que abarque el 75% de la superficie de la Tierra, el CRS utiliza el 25% restante como el área complementaria. La query devuelve resultados de esa área complementaria más pequeña 25% en lugar de la más grande 75%.

La sección Ejemplos en esta página muestra cómo especificar áreas más pequeñas y más grandes.

Para especificar un polígono GeoJSON de un solo anillo con un CRS personalizado de MongoDB, utilice el siguiente prototipo que especifica el CRS personalizado de MongoDB en la expresión $geometry.

{
<location field>: {
$geoIntersects: {
$geometry: {
type: "Polygon" ,
coordinates: [ <coordinates> ],
crs: {
type: "name",
properties: { name: "urn:x-mongodb:crs:strictwinding:EPSG:4326" }
}
}
}
}
}

El CRS personalizado de MongoDB utiliza un orden de recorrido en sentido contrario a las agujas del reloj y permite que $geoIntersects admita consultas con un GeoJSON de un solo anillo polígono cuya área es mayor o igual a un único hemisferio. Si el polígono especificado es más pequeño que un solo hemisferio, el comportamiento de $geoIntersects con el CRS de MongoDB es el mismo que con el CRS por defecto. Consulte también Polígonos “grandes”.

Importante

Si especifica coordenadas de longitud y latitud, enumera primero la longitud y luego la latitud.

  • Los valores de longitud válidos están entre -180 y 180, ambos inclusive.

  • Los valores de latitud válidos están entre -90 y 90, ambos inclusive.

$geoIntersects utiliza geometría esférica. $geoIntersects no requiere un índice geoespacial. Sin embargo, un índice geoespacial mejorará el rendimiento de las consultas. Solo el índice geoespacial 2dsphere admite $geoIntersects.

$geoIntersects no garantiza que considere que un polígono interseque con sus propios bordes; sus propios vértices; o con otro polígono que comparta vértices o bordes pero no espacio interior.

Para $geoIntersects, si especificas un polígono de un solo anillo que tenga un área mayor que un solo hemisferio, incluye el sistema de referencia de coordenadas personalizado de MongoDB en la expresión $geometry. De lo contrario, $geoIntersects realiza consultas sobre la geometría complementaria. Para todos los demás polígonos GeoJSON con áreas mayores que un hemisferio, las consultas de $geoIntersects se refieren a la geometría complementaria.

El siguiente ejemplo usa $geoIntersects para seleccionar todos los datos loc que se cruzan con el Polygon definido por el arreglo coordinates. El área del polígono es menor que el área de un hemisferio individual:

db.places.find(
{
loc: {
$geoIntersects: {
$geometry: {
type: "Polygon" ,
coordinates: [
[ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ]
]
}
}
}
}
)

Para polígonos de un solo anillo con áreas mayores que un solo hemisferio, consulta Intersección con un polígono "grande".

Para query con un polígono GeoJSON de un solo anillo cuyo área sea mayor que la de un solo hemisferio, la expresión $geometry debe especificar el sistema de referencia de coordenadas personalizado de MongoDB. Por ejemplo:

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

Volver

$centerSphere

En esta página