Você pode executar query de dados de localização que interseccionam com umobjeto GeoJSON do . Por exemplo, considere um aplicação que armazena coordenadas de estações de serviço. Você pode criar uma LineString GeoJSON que representa uma viagem de carro e executar uma query de estações de serviço que interseccionam com a rota da viagem de carro.
Para fazer uma query para dados de localização que interseccionam com um GeoJSON objeto, utilize o operador $geoIntersects :
db.<collection>.find( { <location field> : { $geoIntersects : { $geometry : { type : "<GeoJSON object type>", coordinates : [ <coordinates> ] } } } } )
Sobre esta tarefa
Quando você especificar coordenadas de longitude e latitude, liste primeiro a longitude e depois a latitude.
Os valores de longitude válidos estão entre
-180e180, ambos inclusos.Os valores de latitude válidos estão entre
-90e90, ambos inclusos.
Uma localização se cruza com um objeto se ela compartilha pelo menos um ponto com o objeto especificado. Isso inclui objetos que têm uma borda compartilhada.
$geoIntersectsnão exige um índice geoespacial. No entanto, um índice geoespacial melhora o desempenho da query. Somente o índice geoespacial 2dsphere suporta$geoIntersects. Para mais informações, consulte Criar um índice 2dsphere.
Antes de começar
Crie uma coleção gasStations que contenha estes documento:
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" } ] )
Procedimento
A seguinte query $geoIntersects especifica um LineString contendo quatro pontos e retorna documentos que interseccionam com a linha:
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 ] ] } } } } )
Saída:
[ { _id: ObjectId("63f658d45e5eefbdfef81ca4"), loc: { type: 'Point', coordinates: [ -106.31, 35.65 ] }, state: 'New Mexico', country: 'United States', name: 'Horizons Gas Station' } ]