Puedes query datos de ubicación que intersectan con una Objeto GeoJSON. Por ejemplo, considera una aplicación que almacena coordenadas de estaciones de servicio. Puedes crear un GeoJSON LineString que represente un viaje por carretera y query las estaciones de servicio que intersectan con la ruta del viaje por carretera.
Para query datos de ubicación que se crucen con un objeto GeoJSON, usa el $geoIntersects operador:
db.<collection>.find( { <location field> : { $geoIntersects : { $geometry : { type : "<GeoJSON object type>", coordinates : [ <coordinates> ] } } } } )
Acerca de esta tarea
Al especificar las coordenadas de longitud y latitud, enumere primero la longitud y luego la latitud.
Los valores de longitud válidos están entre
-180y180, ambos inclusive.Los valores de latitud válidos están entre
-90y90, ambos inclusive.
Una ubicación se cruza con un objeto si comparte al menos un punto con el objeto especificado. Esto incluye objetos que comparten un borde.
$geoIntersectsno requiere un índice geoespacial. Sin embargo, un índice geoespacial mejora el rendimiento de las query. Solo el índice geoespacial 2dsphere admite$geoIntersects. Para obtener más información, consulta Crea un índice 2dsphere.
Antes de comenzar
Crea una colección gasStations que contenga estos documentos:
db.gasStations.insertMany( [ { loc: { type: "Point", coordinates: [ -106.31, 35.65 ] }, state: "New Mexico", country: "United States", name: "Horizons Gas Station" }, { loc: { type: "Point", coordinates: [ -122.62, 40.75 ] }, state: "California", country: "United States", name: "Car and Truck Rest Area" }, { loc: { type: "Point", coordinates: [ -72.71, 44.15 ] }, state: "Vermont", country: "United States", name: "Ready Gas and Snacks" } ] )
Procedimiento
La siguiente $geoIntersects query especifica una LineString que contiene cuatro puntos y devuelve documentos que se intersectan con la línea:
db.gasStations.find( { loc: { $geoIntersects: { $geometry: { type: "LineString", coordinates: [ [ -105.82, 33.87 ], [ -106.01, 34.09 ], [ -106.31, 35.65 ], [ -107.39, 35.98 ] ] } } } } )
Salida:
[ { _id: ObjectId("63f658d45e5eefbdfef81ca4"), loc: { type: 'Point', coordinates: [ -106.31, 35.65 ] }, state: 'New Mexico', country: 'United States', name: 'Horizons Gas Station' } ]