android - 查找位置之间的距离
问题描述
我正在尝试确定一种方法来识别一组位置中哪个位置最接近用户。我首先尝试确定两个位置之间的距离。到目前为止,我编写代码的方式只能让我确定这个距离一次——即用户只接近一个位置。我正在使用自定义位置提供程序来获取经纬度。我的代码如下。做了很多研究来解决这个问题,但我发现的解决方案要么已经过时,要么对于应该是一项简单的任务来说似乎太复杂了。任何帮助将不胜感激。
@Override
public void gotCurrentLocation (Location location) {
Location locCL = new Location("");
locCL.setLatitude(location.getLatitude());
locCL.setLongitude(location.getLongitude());
Location locIFC = new Location("");
locIFC.setLatitude(xxxx);
locIFC.setLongitude(xxxx);
Location locBGC = new Location ("" );
locBGC.setLatitude(xxxx);
locBGC.setLongitude(xxxx);
float distanceInMeters = locCL.distanceTo(locIFC);
float distanceInMeters = locCL.distanceTo(locBGC);
}
解决方案
/**
* @param startLat gps lat
* @param startLong gps lon
* @param endLat exti lat
* @param endLong exit long
* @return distance in KM
* @since 02040215
* <p>Distance, bearing and more between Latitude/Longitude points</p>
* <p> R is earth’s radius (mean radius = 6,371km)</p>
* <p/>
* <p>var lat1Red = lat1.toRadians();</p>
* <p>var lat2Red = lat2.toRadians();</p>
* <p>var delLat = (lat2 - lat1).toRadians();</p>
* <p>var delLong = (lon2 - lon1).toRadians();</p>
* <p>var a = Math.sin(delLat / 2) * Math.sin(delLat / 2) +</p>
* <p> Math.cos(delLat) * Math.cos(lat2Red) *</p>
* <p> Math.sin(delLong / 2) * Math.sin(delLong / 2);</p>
* <p> var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));</p>
* <p> var d = R * c;</p>
* <p/>
* *
*/
public double calculateDistanceBetween2Point(double startLat, double startLong, double endLat, double endLong) {
/** * R is earths radius (mean radius = 6,371km) */
double earthR = 6371e3;
double dagToRad = Math.PI / 180;
double radStartLat;
double radStartLong;
double radEndLat;
double radEndLong;
double distance = 0;
double dalLat;
double dalLong;
radStartLat = startLat * dagToRad;
radStartLong = startLong * dagToRad;
radEndLat = endLat * dagToRad;
radEndLong = endLong * dagToRad;
dalLat = radEndLat - radStartLat;
dalLong = radEndLong - radStartLong;
double a = Math.sin(dalLat / 2) * Math.sin(dalLat / 2) + Math.cos(radStartLat) *
Math.cos(radEndLat) * Math.sin(dalLong / 2) * Math.sin(dalLong / 2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
distance = earthR * c;
return distance;
}
我想这会对你有所帮助。
推荐阅读
- sapui5 - sapui5 TreeTable 更新绑定
- kotlin - Kotlin - 使扩展功能在整个项目中都可以访问
- java - 在Java中将字符串拆分为字符串(包含一些特殊字符)和整数
- docker - Docker - 在构建期间可访问的配置文件
- java - 使用 Jackson 将不同数量的对象反序列化为 Java 中的列表
- alexa - Alexa Skill - 在多轮对话中检索用户的邮件
- php - Codeigniter 3 升级会话锁定导致问题
- elasticsearch - Kubernetes 集群上的 Elasticsearch 集群。进还是出?
- powershell - 比较对象不返回任何东西
- sas - 使用 COALESCE 函数合并 SAS 行