如何在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】:我假设你有一个Associates
的POJO
,其中每个associate
都有Longitudes
和Latitudes
,所以假设你有一个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中检测最近的可用纬度和经度的主要内容,如果未能解决你的问题,请参考以下文章
在 NativeScript App 上集成 Android 服务
需要使用 PHP 将 android app 生成的纬度和经度值存储到 mySQL 数据库中