有效的方式来选择半径内的所有点

问题描述 投票:-1回答:1

我与meanstack应用程序的工作。所以我有MongoDB的集合,包含世界各地的位置。架构loooks喜欢如下。

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

什么是选择圆圈内的所有点(预定义的点和预先定义的半径)的有效途径..?

使用SQL查询也可以做到这一点。但我想不反复逐一有效的方法,并检查天气它是半径内与否。

mongodb google-maps-api-3 mean-stack
1个回答
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弧度。为了得到公里答案,可以使用下面的公式。

distance_km ≈ radius_km * distance_radians ≈ 6371 * d

在这里,一个神奇的数字是6371左右。地球的半径。这是,你将有你的情况做最小的计算。你可以计算这个距离,选择具有比你的半径值以下的距离的所有记录。

更好的方法

您可以使用Elasticsearch支持地理位置查询获得更好的性能。

© www.soinside.com 2019 - 2024. All rights reserved.