Las siguientes secciones describen las consultas admitidas por el índice 2dsphere.
Objetos GeoJSON delimitados por un polígono
El $geoWithin Consultas de operador para datos de ubicación dentro de un polígono GeoJSON. Los datos de ubicación deben almacenarse en formato GeoJSON. Utilice 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 utiliza la siguiente $geoIntersects sintaxis:
db.<collection>.find( { <location field> : { $geoIntersects : { $geometry : { type : "<GeoJSON object type>" , coordinates : [ <coordinates> ] } } } } )
El siguiente ejemplo utiliza para seleccionar todos los puntos y formas indexados que se intersecan con el polígono definido por $geoIntersects la coordinates matriz.
db.places.find( { loc : { $geoIntersects : { $geometry : { type : "Polygon" , coordinates: [ [ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ] ] } } } } )
Proximidad a un punto GeoJSON
Las consultas de proximidad devuelven los puntos más cercanos al punto definido y ordenan los resultados por distancia. Una consulta de proximidad en datos GeoJSON requiere un índice 2dsphere.
Para consultar la proximidad a un punto GeoJSON, utilice el operador. La distancia se expresa en $near metros.
El $near utiliza la siguiente sintaxis:
db.<collection>.find( { <location field> : { $near : { $geometry : { type : "Point" , coordinates : [ <longitude> , <latitude> ] } , $maxDistance : <distance in meters> } } } )
Para ver ejemplos,$near consulte.
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 radianes, consulte Calcular distancias mediante geometría esférica.
Utilice la siguiente sintaxis:
db.<collection>.find( { <location field> : { $geoWithin : { $centerSphere : [ [ <x>, <y> ] , <radius> ] } } } )
El siguiente ejemplo consulta 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, a radianes dividiéndola entre el radio ecuatorial aproximado de la Tierra, 3963.2 millas:
db.places.find( { loc : { $geoWithin : { $centerSphere : [ [ -88 , 30 ] , 10 / 3963.2 ] } } } )