我与meanstack应用程序的工作。所以我有MongoDB的集合,包含世界各地的位置。架构loooks喜欢如下。
[{
address : "example address",
langitude : 79.8816,
latitude : 6.773
},
{...}]
什么是选择圆圈内的所有点(预定义的点和预先定义的半径)的有效途径..?
使用SQL查询也可以做到这一点。但我想不反复逐一有效的方法,并检查天气它是半径内与否。
坐标{LAT1,lon1}和{LAT2,lon2}两点之间的距离d由下式给出
d = 2*asin(sqrt((sin((lat1-lat2)/2))^2 +
cos(lat1)*cos(lat2)*(sin((lon1-lon2)/2))^2))
上述公式给出d弧度。为了得到公里答案,可以使用下面的公式。
distance_km ≈ radius_km * distance_radians ≈ 6371 * d
在这里,一个神奇的数字是6371左右。地球的半径。这是,你将有你的情况做最小的计算。你可以计算这个距离,选择具有比你的半径值以下的距离的所有记录。
更好的方法
您可以使用Elasticsearch支持地理位置查询获得更好的性能。