【问题标题】:Calculating the distance between two latitude and longitude points in android [closed]计算android中两个经纬度点之间的距离[关闭]
【发布时间】:2014-03-22 11:35:55
【问题描述】:

我怎样才能找到twolatitudelongitude点之间的距离


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

我应该使用以下哪一个:

  • 安卓位置提供者
  • 谷歌 API
  • 数学计算

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

【问题讨论】:

标签: android google-maps


【解决方案1】:

您可以使用内置算法:

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);

【讨论】:

  • 我不知道为什么这个东西没有返回正确的经纬度。
  • 我认为距离以米为单位
  • 将结果(米)乘以 0.000621371 得到以英里为单位的距离
  • 现在说非法构造函数
  • distanceTo 是什么 正在生成错误消息 是来制作一个方法 什么方法的代码
【解决方案2】:

您可以使用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://stackoverflow.com/a/17787472/3449528

【讨论】:

    猜你喜欢
    • 2012-10-13
    • 2011-04-11
    • 2018-06-11
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    相关资源
    最近更新 更多