Se puede query por datos de ubicación que se intersequen con un objeto GeoJSON. Por ejemplo, considere una aplicación que almacene las coordenadas de gasolineras. Puedes crear un GeoJSON LineString que represente un viaje en carretera y query las gasolineras que se crucen con la ruta del viaje.
Para query datos de ubicación que intersecten con un objeto GeoJSON, utiliza el operador $geoIntersects:
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' } ]