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

Calcular distância utilizando geometria esférica

Aviso

Para queries esféricas, utilize o resultado do índice 2dsphere .

O uso do índice 2d para query esféricas pode levar a resultados incorretos, como o uso do índice 2d para query esféricas que envolvem os pólos.

O índice 2d suporta queries que calculam distâncias em um plano euclidiano (superfície plana). O índice também suporta os seguintes operadores de query e comando que calculam distâncias utilizando geometria esférica:

Observação

Embora as queries básicas que utilizam distância esférica sejam suportadas pelo índice 2d , considere mover para um índice 2dsphere se seus dados forem principalmente longitude e latitude.

  • $nearSphere

  • $centerSphere

  • $near

  • $geoNear estágio do pipeline com a opção spherical: true

Importante

As operações mencionadas acima utilizam radianos para distância. Outros operadores de query esférica não, como $geoWithin.

Para que os operadores de query esférica funcionem corretamente, você deve converter distâncias para radianos e converter de radianos para as unidades de distância usadas pelo aplicativo.

Para converter:

  • distância para radianos: divide a distância pelo raio da esfera (por exemplo, a Terra) nas mesmas unidades que a medida de distância.

  • radianos para distância: multiplique a medida de radianos pelo raio da esfera (por exemplo, a Terra) no sistema de unidades para o qual você deseja converter a distância.

O raio equatorial da Terra é de aproximadamente 3,963.2 milhas ou 6,378.1 quilômetros.

A query a seguir retornaria documentos da coleção places dentro do círculo descrito pelo centro [ -74, 40.74 ] com um raio de 100 milhas:

db.places.find( { loc: { $geoWithin: { $centerSphere: [ [ -74, 40.74 ] ,
100 / 3963.2 ] } } } )

Observação

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.

← 2d