$geoIntersects
Nesta página
Definição
$geoIntersects
Seleciona 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
$geoIntersects
utiliza o operador$geometry
para 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
$geoIntersects
que especificam geometrias GeoJSON com áreas maiores que um único hemisfério, o uso do CRS padrão resulta em queries para as geometrias complementares.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
$geoIntersects
aceite 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$geoIntersects
com 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
-180
e180
, ambos inclusos.Os valores de latitude válidos estão entre
-90
e90
, 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"
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, $geoIntersects
consultará a geometria complementar. Para todos os outros polígonos GeoJSON com áreas maiores que um hemisfério, $geoIntersects
consultará 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" } } } } } } )