我使用firebase(android)存储数据,我保存用户如下:
users{
abcdefghi{
name:"abc",
lat:"12.988",
long:-0.123,
desc:"all other desc"
},KLMNGHT{
name:"def",
lat:"11.988",
long:-1.123,
desc:" other desc"
}
}
我想显示进入我的半径区域(邻近区域)的所有用户,这些用户是根据我的位置定义的。我没有想法。我看着Haversine公式。但我不知道如何实现这一目标。
找到用户的最佳算法是什么?
答案 0 :(得分:1)
private const double EARTH_RADIUS = 6378.137;
private static double rad(double d)
{
return d * Math.PI / 180.0;
}
public static double GetDistance(double lat1, double lng1, double lat2, double lng2)
{
double radLat1 = rad(lat1);
double radLat2 = rad(lat2);
double a = radLat1 - radLat2;
double b = rad(lng1) - rad(lng2);
double s = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a/2),2) +
Math.Cos(radLat1)*Math.Cos(radLat2)*Math.Pow(Math.Sin(b/2),2)));
s = s * EARTH_RADIUS;
s = Math.Round(s * 10000) / 10000;
return s;
}
也许这段代码可以帮到你。
答案 1 :(得分:1)
问题严格如此:给定地球上的两个点A(lan1,lon1)B(lan2,lon2)找到A和B之间的距离?当你说“最好的算法”时,你的开发时间,时间,记忆意味着什么?!
无论如何,假设“最好”'在开发时间方面你可以使用: 1.Google的API在此解释:https://developers.google.com/maps/documentation/distance-matrix/intro#DistanceMatrixRequests
2.这是一个简单的实施 - 但我还没有自己测试 - https://www.geodatasource.com/developers/java