Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / / /

$geoIntersects

Nesta página

  • Definição
  • Comportamento
  • Exemplos
$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 e 180, ambos inclusos.

  • Os valores de latitude válidos estão entre -90 e 90, ambos inclusos.

$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.

$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.

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.

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".

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" }
}
}
}
}
}
)

Voltar

Consulta geoespacial