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
/ /
Consulta geoespacial

$geoWithin

$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 varios), un GeoJSON MultiPolygon o una forma definida por legacy coordinate pairs. El operador $geoWithin usa el operador $geometry 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 MongoDB personalizado, utilice el siguiente prototipo que especifica el CRS MongoDB personalizado en la $geometry expresión:

{
<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 giro en sentido antihorario y permite que admita $geoWithin consultas con un polígono GeoJSON de un solo anillo cuya área sea mayor o igual a un hemisferio. Si el polígono especificado es menor que un hemisferio, el comportamiento de $geoWithin con el CRS de MongoDB es el mismo que con el CRS predeterminado. Consulte también Polígonos "Grandes".

Si consulta la inclusión en una forma definida por pares de coordenadas heredadas en un plano, utilice 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 utiliza longitud y latitud, especifique 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, u otro polígono que comparte su geometría componente.

Para $geoWithin, si especificas un polígono de un solo anillo que tiene un área mayor que un solo hemisferio, incluye la expresión the custom MongoDB coordinate reference system in the $geometry; de lo contrario, $geoWithin query la geometría complementaria. Para todos los demás polígonos GeoJSON con áreas mayores que un hemisferio, $geoWithin consulta la geometría complementaria.

El siguiente ejemplo selecciona todos los loc datos que existen dentro de un GeoJSON. El área del polígono es menor que el área de un Polygon 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 consultar un polígono GeoJSON de un solo anillo cuya área sea mayor que un hemisferio, la expresión debe especificar el sistema de referencia de coordenadas MongoDB personalizado. Por $geometry 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

$geoIntersects

En esta página