来自我的位置的Nearst 50用户来自我的应用服务器的数千名用户

时间:2016-07-13 11:49:21

标签: android geolocation android-location android-geofence

我的应用服务器拥有数千名用户的位置(LatLng)。 我想要在应用程序中显示来自任何用户位置的最近50位用户? 我如何快速过滤以从服务器数据库中获取最近的50个用户(LatLng)?

我尝试了Sort list of lon\lat points, start with nearest ...但是花了很多时间在地图上对结果进行排序和绘制。 请建议。

1 个答案:

答案 0 :(得分:0)

首先假设您将所有LatLng点都放入列表中。 (即使它们没有排序或以某种方式被数据库接收)

使用此功能计算LatLng的点数。

public double CalculationByDistance(LatLng StartP, LatLng EndP) {

    int Radius = 6371;// radius of earth in Km
    double lat1 = StartP.latitude;
    double lat2 = EndP.latitude;
    double lon1 = StartP.longitude;
    double lon2 = EndP.longitude;
    double dLat = Math.toRadians(lat2 - lat1);
    double dLon = Math.toRadians(lon2 - lon1);
    double a = Math.sin(dLat / 2) * Math.sin(dLat / 2)
            + Math.cos(Math.toRadians(lat1))
            * Math.cos(Math.toRadians(lat2)) * Math.sin(dLon / 2)
            * Math.sin(dLon / 2);
    double c = 2 * Math.asin(Math.sqrt(a));
    double valueResult = Radius * c;
    double km = valueResult / 1;
    DecimalFormat newFormat = new DecimalFormat("####");
    int kmInDec = Integer.valueOf(newFormat.format(km));
    double meter = valueResult % 1000;
    int meterInDec = Integer.valueOf(newFormat.format(meter));

    return Radius * c;

}

  

StartP应该是用户的LatLng。

     

EndP应该是所有其他LatLngs

您可以创建一个列表,在该列表的排序之后插入用户的LatLng和其他LatLng之间的所有距离。现在,您有一个排序列表,其中包含用户的LatLng和其余LatLng之间的距离,因此使用for循环,您可以执行任何操作。如果需要时间,您可以添加一个进度条,通知用户发生了某些事情/正在加载等等。