Las siguientes secciones describen consultas compatibles con el índice 2dsphere.
Objetos GeoJSON delimitados por un polígono
La $geoWithin consultas de operadores para datos de ubicación encontrados dentro de un polígono GeoJSON. Tus datos de ubicación deben almacenarse en formato GeoJSON. Utiliza la siguiente sintaxis:
db.<collection>.find( { <location field> : { $geoWithin : { $geometry : { type : "Polygon" , coordinates : [ <coordinates> ] } } } } )
El siguiente ejemplo selecciona todos los puntos y formas que existen completamente dentro de un polígono GeoJSON:
db.places.find( { loc : { $geoWithin : { $geometry : { type : "Polygon" , coordinates : [ [ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ] ] } } } } )
Intersecciones de objetos GeoJSON
El operador consulta las ubicaciones que intersecan un objeto GeoJSON especificado. Una ubicación interseca el objeto si la intersección no está vacía. Esto incluye los documentos que comparten un $geoIntersects borde.
El operador $geoIntersects utiliza la siguiente sintaxis:
db.<collection>.find( { <location field> : { $geoIntersects : { $geometry : { type : "<GeoJSON object type>" , coordinates : [ <coordinates> ] } } } } )
El siguiente ejemplo utiliza $geoIntersects para seleccionar todos los puntos indexados y formas que se cruzan con el polígono definido por el arreglo coordinates.
db.places.find( { loc : { $geoIntersects : { $geometry : { type : "Polygon" , coordinates: [ [ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ] ] } } } } )
Proximidad a un punto GeoJSON
Las queries de proximidad devuelven los puntos más cercanos al punto definido y ordenan los resultados por distancia. Una query de proximidad sobre datos GeoJSON requiere un índice 2dsphere.
Para query la proximidad a un punto GeoJSON, utilizá el operador $near. La distancia está en metros.
El $near utiliza la siguiente sintaxis:
db.<collection>.find( { <location field> : { $near : { $geometry : { type : "Point" , coordinates : [ <longitude> , <latitude> ] } , $maxDistance : <distance in meters> } } } )
Para ejemplos, consulta $near.
Consulte también el $nearSphere operador y la $geoNear etapa de canalización de agregación.
Puntos dentro de un círculo definido en una esfera
Para seleccionar todas las coordenadas de la cuadrícula en un casquete esférico, utilice $geoWithin con el operador. Especifique una matriz que $centerSphere contenga:
Las coordenadas de cuadrícula del punto central del círculo
El radio del círculo se mide en radianes. Para calcular los radianes, consulta Calcular distancia utilizando geometría esférica.
Utiliza la siguiente sintaxis:
db.<collection>.find( { <location field> : { $geoWithin : { $centerSphere : [ [ <x>, <y> ] , <radius> ] } } } )
El siguiente ejemplo query las coordenadas de la cuadrícula y devuelve todos los documentos dentro de un radio de 10 millas de longitud 88 W y latitud 30 N. El ejemplo convierte la distancia, 10 millas, en radianes dividiendo por el radio ecuatorial aproximado de la Tierra, que es de 3963,2 millas:
db.places.find( { loc : { $geoWithin : { $centerSphere : [ [ -88 , 30 ] , 10 / 3963.2 ] } } } )