如何在Android App中检测最近的可用纬度和经度

Posted

技术标签:

【中文标题】如何在Android App中检测最近的可用纬度和经度【英文标题】:How to detect Nearst available lattitude and Longitude in Android App 【发布时间】:2018-03-07 04:04:28 【问题描述】:

我有员工的经度和纬度数据。我想检测到用户位置最近的关联。我将使用 android SDK 检测用户位置。 我的问题是如何匹配参数以使 APP 可以显示最近的最佳伙伴。提前致谢。

【问题讨论】:

试试***.com/questions/18170131/… 【参考方案1】:

考虑到您的同事列表是非空的 lats longs 数组。

LatLng GetNearest(LatLng myPos, LatLng[] Associates)

    double nearestDistance = distance(myPos.lat, myPos.lng, Associates[0].lat,Associates[0].lng);
    LatLng Nearest = Associates[0];
    for(int i = 1; i < Associates.length(); i ++)
    
       double _d =  distance(myPos.lat, myPos.lng, Associates[i].lat, Associates[i].lng);
       if(_d < nearestDistance)
      
           nearestDistance = _d;
           Nearest  = Associates[i];

      
    
  return Nearest;


/** calculates the distance between two locations in MILES */
private double distance(double lat1, double lng1, double lat2, double lng2) 

    double earthRadius = 3958.75; // in miles, change to 6371 for kilometer output

    double dLat = Math.toRadians(lat2-lat1);
    double dLng = Math.toRadians(lng2-lng1);

    double sindLat = Math.sin(dLat / 2);
    double sindLng = Math.sin(dLng / 2);

    double a = Math.pow(sindLat, 2) + Math.pow(sindLng, 2)
        * Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2));

    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));

    double dist = earthRadius * c;

    return dist; // output distance, in MILES

【讨论】:

【参考方案2】:

我假设你有一个AssociatesPOJO,其中每个associate 都有LongitudesLatitudes,所以假设你有一个Array 的同事然后找到离用户最近的位置,使用这个简短的逻辑:

 for (Associates associate : associates) 
        Double associateLatitude = associate.getLatitude();
        Double associateLongitude = associate.getLongitude();

        android.location.Location locationOne = new android.location.Location("");
        locationOne.setLatitude(userLatitude);
        locationOne.setLongitude(userLongitude);

        android.location.Location locationTwo = new android.location.Location("");
        locationTwo.setLongitude(associateLongitude);
        locationTwo.setLatitude(associateLatitude);

        float distance = locationOne.distanceTo(locationTwo);
        if (disTemp == 0.0f) 
            disTemp = distance;
            nearestAssociate = associate;
         else if (disTemp > distance) 
            disTemp = distance;
            nearestAssociate = associate;
        
    

【讨论】:

以上是关于如何在Android App中检测最近的可用纬度和经度的主要内容,如果未能解决你的问题,请参考以下文章

使用纬度-经度返回用户位置可用的最近地点?

如何在 ARCore Android 中禁用表面检测

在 NativeScript App 上集成 Android 服务

需要使用 PHP 将 android app 生成的纬度和经度值存储到 mySQL 数据库中

如何通过Web App(ReactJS)检测Android设备虚拟键盘中的空格键

如何在Android中获取经度和纬度