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

Converter distância para radianos para operadores esféricos

Nesta página

  • Sobre esta tarefa
  • Procedimento
  • Exemplos
  • Converter milhas em radianos
  • Converter quilômetros em radianos

Os índices 2D suportam determinados operadores de query que calculam distâncias utilizando geometria esférica. Os operadores de query esférica utilizam radianos para distância. Para usar operadores de query esférica com um índice 2d, você deve converter distâncias para radianos.

Os índices 2D suportam os seguintes operadores de query esférica:

Usar um índice 2d para queries sobre dados esféricos pode retornar resultados incorretos ou um erro. Por exemplo, índices 2d não permitem queries esféricas que envolvam os pólos.

Se seus dados são armazenados como longitude e latitude e você geralmente executa query em superfícies esféricas, use um índice 2dsphere em vez de um índice 2d.

Quando você especificar coordenadas de longitude e latitude, liste primeiro a longitude e depois 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.

Para converter a distância para radianos, divida a distância pelo raio da esfera (por exemplo, a Terra) nas mesmas unidades que a medida de distância.

O raio equatorial da Terra é de aproximadamente 3.963,2 milhas ou 6.378,1 quilômetros.

Os exemplos seguintes utilizam o operador $centerSphere para executar queries. O operador $centerSphere utiliza radianos para calcular distância.

Crie a coleção contacts:

db.contacts.insertMany( [
{
name: "Evander Otylia",
phone: "202-555-0193",
address: [ 55.5, 42.3 ]
},
{
name: "Georgine Lestaw",
phone: "714-555-0107",
address: [ -74, 44.74 ]
}
] )

O campo address contém pares de coordenadas legados.

A seguinte query retorna documentos onde o campo address está dentro de um círculo com ponto central [ -72, 44 ] e um raio de 200 milhas:

db.contacts.find(
{
address:
{
$geoWithin:
{
$centerSphere:
[
[ -72, 44 ] ,
200 / 3963.2
]
}
}
}
)

Saída:

[
{
_id: ObjectId("647e565c6cdaf4dc323ec92d"),
name: 'Georgine Lestaw',
phone: '714-555-0107',
address: [ -74, 44.74 ]
}
]

Na query anterior, para converter 200 milhas para radianos, as milhas especificadas foram divididas por 3963.2.

A seguinte query retorna documentos onde o campo address está dentro de um círculo com ponto central [ 55, 42 ] e um raio de 500 quilômetros:

db.contacts.find(
{
address:
{
$geoWithin:
{
$centerSphere:
[
[ 55, 42 ] ,
500 / 6378.1
]
}
}
}
)

Saída:

[
{
_id: ObjectId("647e565c6cdaf4dc323ec92c"),
name: 'Evander Otylia',
phone: '202-555-0193',
address: [ 55.5, 42.3 ]
}
]

Na query anterior, para converter 500 quilômetros para radianos, os quilômetros especificados foram divididos por 6378,1.

Voltar

Internals (Internos)