Las siguientes secciones describen las consultas admitidas por el 2dsphere
índice.
El $geoWithin
operador consulta los datos de ubicación que se encuentran dentro de un polígono GeoJSON. Los datos de su 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 por completo dentro de un polígono GeoJSON:
db.places.find( { loc : { $geoWithin : { $geometry : { type : "Polygon" , coordinates : [ [ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ] ] } } } } )
El $geoIntersects
operador consulta las ubicaciones que se cruzan con un objeto GeoJSON específico. Una ubicación se cruza con el objeto si la intersección no está vacía. Esto incluye documentos que tienen un borde compartido.
El $geoIntersects
operador usa la siguiente sintaxis:
db.<collection>.find( { <location field> : { $geoIntersects : { $geometry : { type : "<GeoJSON object type>" , coordinates : [ <coordinates> ] } } } } )
El siguiente ejemplo se utiliza $geoIntersects
para seleccionar todos los puntos y formas indexados que se cruzan con el polígono definido por la coordinates
matriz.
db.places.find( { loc : { $geoIntersects : { $geometry : { type : "Polygon" , coordinates: [ [ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ] ] } } } } )
Las consultas de proximidad devuelven los puntos más cercanos al punto definido y clasifican los resultados por distancia. Una consulta de proximidad sobre datos de GeoJSON requiere un 2dsphere
índice.
Para consultar la proximidad a un punto GeoJSON, use el $near
operador. La distancia está en metros.
El $near
usa la siguiente sintaxis:
db.<collection>.find( { <location field> : { $near : { $geometry : { type : "Point" , coordinates : [ <longitude> , <latitude> ] } , $maxDistance : <distance in meters> } } } )
Para ver ejemplos, consulte $near
.
Consulte también el $nearSphere
operador y la $geoNear
etapa de canalización de agregación.
Para seleccionar todas las coordenadas de la cuadrícula en un "casquete esférico" en una esfera, utilice $geoWithin
con el $centerSphere
operador. Especifique una matriz que contenga:
- Las coordenadas de la cuadrícula del punto central del círculo.
- El radio del círculo medido en radianes. Para calcular radianes, consulte Calcular distancia 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 dividiendo por el radio ecuatorial aproximado de la Tierra, 3963,2 millas:
db.places.find( { loc : { $geoWithin : { $centerSphere : [ [ -88 , 30 ] , 10 / 3963.2 ] } } } )