选择半径内所有点的有效方法

时间:2019-02-05 11:44:07

标签: mongodb google-maps-api-3 mean-stack

我正在使用meanstack应用程序。所以我的mongodb集合包含世界各地。模式看起来如下。

[{
address : "example address",
langitude : 79.8816,
latitude : 6.773
},
{...}]

在Circle中选择所有点的有效方法是什么(预定义点和预定义半径).. ??

使用SQL查询,我们也可以做到这一点。但是我想要一种有效的方法,而不是一遍又一遍地检查天气是否在该半径范围内。

1 个答案:

答案 0 :(得分:1)

坐标为{lat1,lon1}和{lat2,lon2}的两个点之间的距离d由

给出
d = 2*asin(sqrt((sin((lat1-lat2)/2))^2 +
    cos(lat1)*cos(lat2)*(sin((lon1-lon2)/2))^2))

上面的公式给出d的弧度。要获得以km为单位的答案,请使用以下公式。

distance_km ≈ radius_km * distance_radians ≈ 6371 * d

在这里,魔术数6371约为。行星地球的半径。这是在您的情况下必须要做的最少计算。您可以计算该距离并选择所有距离小于半径值的记录。

更好的方法

您可以使用Elasticsearch来支持地理位置查询,以提高性能。