MongoDB 与此查询的等价物是什么:
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 ;
这使用haversine 公式来计算到固定点的大圆距离。我们想从一个位置获得最近的 20 个点,然后显示距离。
MongoDB 内置了对地理索引的支持。您不需要自己进行计算。
基本上,您将创建一个字段,其 lat/long 存储为数组或子文档,类似于以下内容之一:
然后适当地索引新的 loc 字段:
最后,您可以使用其中一个运算符来查询一个点以获得最近的 20 个结果:
当然,您可以只使用 MongoDB 存储数据,然后使用 find() 从数据库中提取信息并在客户端进行计算,但我想这不是您想要做的。
如果等式的距离部分是您想要的:
http://www.mongodb.org/display/DOCS/Geospatial+Indexing#GeospatialIndexing-geoNearCommand
$geoNear 运算符也将返回距离。一个例子:
这些
"dis" : 69.29646421910687
元素是您正在寻找的,还有一个球面距离选项。对于所有这些,如何使用距离等等,请查看此处以获取有关地理索引以及如何使用它们的更多信息:
http://www.mongodb.org/display/DOCS/Geospatial+Indexing/