Qual é o equivalente do MongoDB para esta consulta:
SELECT 111151.29341326 * SQRT( pow(-6.186753-`Latitude`, 2)
+ pow(106.772835-`Longitude`, 2)
* cos(-6.186753*0.017453292519943)
* cos(`Latitude`*0.017453292519943)
)
as distance
from tablename ;
Isso usa a fórmula de Haversine para calcular a distância do grande círculo a um ponto fixo. Queremos chegar mais perto de 20 pontos de um local e, em seguida, exibir a distância.
O MongoDB tem suporte integrado para geoindexação. Você não precisa fazer o cálculo sozinho.
Basicamente, você criaria um campo com a lat/long armazenada como uma matriz ou como subdocumentos, algo como um destes:
Em seguida, indexe o novo campo loc apropriadamente:
Finalmente, você pode usar um dos operadores para consultar um ponto para os 20 resultados mais próximos:
Você poderia, é claro, apenas usar o MongoDB para armazenar os dados, extrair as informações do banco de dados com um find () e fazer o cálculo do lado do cliente, mas imagino que não seja isso que você deseja fazer.
Se a parte da distância da equação for o que você deseja:
http://www.mongodb.org/display/DOCS/Geospatial+Indexing#GeospatialIndexing-geoNearCommand
O operador $geoNear também retornará a distância. Um exemplo:
Os
"dis" : 69.29646421910687
elementos são o que você procura, também há uma opção de distância esférica.Por tudo isso, como usar as distâncias e muito mais, veja aqui mais informações sobre geoíndices e como usá-los:
http://www.mongodb.org/display/DOCS/Geospatial+Indexing/