Definição
$geoIntersectsSeleciona documentos cujos dados geoespaciais interseccionam com um objeto GeoJSON especificado; isto é, onde a interseção dos dados e do objeto especificado não está vazia.
O operador
$geoIntersectsutiliza o operador$geometrypara especificar o objeto GeoJSON. Para especificar um polígono ou vários polígonos GeoJSON com o sistema de referência de coordenadas padrão (CRS), utilize a seguinte sintaxe:{ <location field>: { $geoIntersects: { $geometry: { type: "<GeoJSON object type>" , coordinates: [ <coordinates> ] } } } } Para queries do que especificam geometrias GeoJSON com áreas maiores que um único hemisfério, o uso do CRS padrão resulta em queries para as geometrias
$geoIntersectscomplementares.Uma geometria complementar é a menor de duas geometrias. Se uma geometria especificada cobrir mais de um hemisfério, a query padrão do CRS retornará documentos para a geometria complementar.
Por exemplo, se você definir uma geometria como uma área que cobre 75% da superfície da Terra, o CRS usará o 25% restante como área complementar. A query retorna resultados dessa área complementar menor 25% em vez da 75% maior.
A seção Exemplos nesta página mostra como especificar áreas menores e maiores.
Para especificar um polígono GeoJSON com um MongoDB CRS personalizado, utilize o seguinte protótipo que especifica o MongoDB CRS personalizado na expressão
$geometry:{ <location field>: { $geoIntersects: { $geometry: { type: "Polygon" , coordinates: [ <coordinates> ], crs: { type: "name", properties: { name: "urn:x-mongodb:crs:strictwinding:EPSG:4326" } } } } } } O CRS personalizado do MongoDB usa uma ordem de enrolamento no sentido anti-horário e permite que suporte
$geoIntersectsqueries com um polígono GeoJSON de anel único cuja área é maior ou igual a um único hemisfério. Se o polígono especificado for menor que um único hemisfério, o comportamento do$geoIntersectscom o MongoDB CRS será o mesmo que com o CRS padrão. Veja também "Big" Polígonos.Importante
Se especificar coordenadas de latitude e longitude, liste a longitude primeiro e então 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.
Comportamento
Índices geoespaciais
$geoIntersects utiliza geometria esférica. não exige um índice geoespacial. No entanto, um$geoIntersects índice geoespacial melhorará o desempenho da query. Somente o índice geoespacial 2dsphere $geoIntersects suporta.
Degeneração geométrica
$geoIntersects não garante que considerará a interseção de um polígono com suas próprias bordas, seus próprios vértices ou outro polígono que compartilhe vértices ou bordas, mas não tenha espaço interior.
Polígonos "big"
Por$geoIntersects, se você especificar um polígono de anel único que tenha uma área maior que um único hemisfério, inclua o sistema de referência de coordenadas personalizado do MongoDB na expressão$geometry. Caso contrário, as queries do$geoIntersectspara a geometria complementar. Para todos os outros polígonos GeoJSON com áreas maiores que um hemisfério, $geoIntersectsqueries para a geometria complementar.
Exemplos
Intersecciona um polígono
O exemplo a seguir usa para selecionar todos $geoIntersects os loc dados que fazem interseção com o definido Polygon pela coordinates array. A área do polígono é menor que a área de um único hemisfério:
db.places.find( { loc: { $geoIntersects: { $geometry: { type: "Polygon" , coordinates: [ [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] ] } } } } )
Para polígonos de anel único com áreas maiores que um único hemisfério, consulte Intersecciona com um polígono "grande".
Intersecciona um Polígono "Grande"
Para executar query com um polígono GeoJSON de anel único cuja área é maior que um único hemisfério, a expressão $geometry deve especificar o sistema de referência de coordenadas MongoDB personalizado. Por exemplo:
db.places.find( { loc: { $geoIntersects: { $geometry: { type : "Polygon", coordinates: [ [ [ -100, 60 ], [ -100, 0 ], [ -100, -60 ], [ 100, -60 ], [ 100, 60 ], [ -100, 60 ] ] ], crs: { type: "name", properties: { name: "urn:x-mongodb:crs:strictwinding:EPSG:4326" } } } } } } )