在安卓中计算两个纬度和经度点之间的距离

25

如何找到两个纬度和经度点之间的距离


对于其中一个纬度和经度点,我已经在数据库中了,另一个点我想使用移动设备的当前位置。

以下三种方法中应该选择哪一种::

  • Android定位提供程序
  • Google API
  • 数学计算

注意:: 任何演示代码示例都将有用


https://dev59.com/NWsz5IYBdhLWcg3wOVH5 - General Grievance
2个回答

57

您可以使用内置算法:

Location locationA = new Location("point A");     
locationA.setLatitude(latA); 
locationA.setLongitude(lngA);
Location locationB = new Location("point B");
locationB.setLatitude(latB); 
LocationB.setLongitude(lngB);
distance = locationA.distanceTo(locationB) ;

更新:(我没有任何与此相关的错误)

LatLng latLngA = new LatLng(12.3456789,98.7654321);
LatLng latLngB = new LatLng(98.7654321,12.3456789);

Location locationA = new Location("point A");
locationA.setLatitude(latLngA.latitude);
locationA.setLongitude(latLngA.longitude);
Location locationB = new Location("point B");
locationB.setLatitude(latLngB.latitude);
locationB.setLongitude(latLngB.longitude);

double distance = locationA.distanceTo(locationB);

我不知道为什么这个东西没有返回正确的纬度和经度。 - Shajeel Afzal
3
距离是以米为单位的,我认为。 - David
将结果(米)乘以0.000621371,即可得到英里数。 - mohsinj
现在显示非法的构造函数。 - user151496
distanceTo 是产生错误消息的内容,需要创建一个方法来编写该方法的代码。 - Ashish Shahi
我已经更新了答案,请检查。 - David

14

您可以使用Haversine公式算法。已经有其他用户为此编写了解决方案:

public double CalculationByDistance(double initialLat, double initialLong,
                            double finalLat, double finalLong){
int R = 6371; // km
double dLat = toRadians(finalLat-initialLat);
double dLon = toRadians(finalLong-initialLong);
lat1 = toRadians(lat1);
lat2 = toRadians(lat2);

double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
        Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2); 
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
return R * c;
}

public double toRadians(deg) {
  return deg * (Math.PI/180)
}

来源:https://dev59.com/HHTYa4cB1Zd3GeqPyL7c#17787472


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接