我正在使用meanstack应用程序。所以我的mongodb集合包含世界各地。模式看起来如下。
[{
address : "example address",
langitude : 79.8816,
latitude : 6.773
},
{...}]
在Circle中选择所有点的有效方法是什么(预定义点和预定义半径).. ??
使用SQL查询,我们也可以做到这一点。但是我想要一种有效的方法,而不是一遍又一遍地检查天气是否在该半径范围内。
答案 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来支持地理位置查询,以提高性能。