Definição
$geoIntersectsSeleciona documentos cujos dados geoespaciais interseccionam com um objetoGeoJSON especificado; ou seja, 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 GeoJSON ou multipolígonos usando 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
$geoIntersectsque especificam geometrias GeoJSON com áreas maiores que um único hemisfério, o uso do CRS padrão resulta em queries para as geometrias complementares.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
$geoIntersectsaceite queries com um polígono GeoJSON de anel único cuja área seja 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 CRS do MongoDB será o mesmo que com o CRS padrão. Veja também Polígonos "big".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. $geoIntersects não exige um índice geoespacial. No entanto, um índice geoespacial melhorará o desempenho da query. Somente o índice geoespacial 2dsphere aceita $geoIntersects.
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"
Para $geoIntersects, se você especificar um polígono de anel único que tenha uma área maior que um único hemisfério, inclua a expressão the
custom MongoDB coordinate reference system in the $geometry ; caso contrário, $geoIntersects queries para a geometria complementar. Para todos os outros polígonos GeoJSON com áreas maiores que um hemisfério, $geoIntersects queries para a geometria complementar.
Exemplos
Intersecciona um polígono
O exemplo a seguir utiliza $geoIntersects para selecionar todos os dados loc que fazem interseção com o Polygon definido pela array coordinates. 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" } } } } } } )