Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

$geoWithin (query predicate operador)

$geoWithin

Selecciona documentos con datos geoespaciales que existan completamente dentro de una forma especificada.

La forma especificada puede ser un GeoJSON Polygon (ya sea de un solo anillo o de múltiples anillos), un GeoJSON MultiPolygon o una forma definida por legacy coordinate pairs. El $geoWithin El operador utiliza el $geometry operador para especificar el objeto GeoJSON.

Para especificar GeoJSON polígonos o poligonales múltiples usando el sistema de referencia de coordenadas (CRS) por defecto, usa la siguiente sintaxis:

{
<location field>: {
$geoWithin: {
$geometry: {
type: <"Polygon" or "MultiPolygon"> ,
coordinates: [ <coordinates> ]
}
}
}
}

Para $geoWithin 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.

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

{
<location field>: {
$geoWithin: {
$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 $geoWithin 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 $geoWithin con el CRS de MongoDB es el mismo que con el CRS por defecto. Consulte también Polígonos “grandes”.

Si se consulta para inclusión en una forma definida por legacy coordinate pairs en un plano, utiliza la siguiente sintaxis:

{
<location field>: {
$geoWithin: { <shape operator>: <coordinates> }
}
}

Los operadores de forma disponibles son:

  • $box,

  • $polygon,

  • $center (define un círculo), y

  • $centerSphere (define un círculo en una esfera).

Importante

Si se utiliza la longitud y la latitud, se deben especificar las coordenadas en orden de longitude, latitude.

$geoWithin no requiere un índice geoespacial. Sin embargo, un índice geoespacial mejorará el rendimiento de las query. Tanto los 2dsphere como los 2d índices geoespaciales admiten $geoWithin.

El operador $geoWithin no devuelve resultados ordenados. Como tal, MongoDB puede devolver consultas $geoWithin más rápidamente que consultas geoespaciales $near o $nearSphere, que ordenan los resultados.

$geoWithin no garantiza que considerará que una pieza de geometría contiene su geometría componente, o que otro polígono que comparte su geometría componente.

Para $geoWithin, 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, $geoWithin realiza consultas sobre la geometría complementaria. Para todos los demás polígonos GeoJSON con áreas mayores que un hemisferio, las consultas de $geoWithin se refieren a la geometría complementaria.

El siguiente ejemplo selecciona todos los datos de loc que existen completamente dentro de un GeoJSON Polygon. El área del polígono es menor que el área de un único hemisferio:

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

Para polígonos de un solo anillo con áreas más grandes que un solo hemisferio, consulta Dentro de 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: {
$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" }
}
}
}
}
}
)

Volver

$geometry

En esta página