【发布时间】:2014-03-22 11:35:55
【问题描述】:
我怎样才能找到twolatitude和longitude点之间的距离
对于我在数据库中拥有的一个纬度和经度点,另一个我想使用移动设备的当前位置
我应该使用以下哪一个::
- 安卓位置提供者
- 谷歌 API
- 数学计算
注意:: 任何演示代码示例都会很有用
【问题讨论】:
标签: android google-maps
twolatitude和longitude点之间的距离对于我在数据库中拥有的一个纬度和经度点,另一个我想使用移动设备的当前位置
我应该使用以下哪一个::
注意:: 任何演示代码示例都会很有用
【问题讨论】:
标签: android google-maps
您可以使用内置算法:
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);
【讨论】:
您可以使用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)
}
【讨论】: