您的位置:首页 > 移动开发 > Android开发

Android 自动获取经纬度,计算距离、经纬度、方位角

2013-11-14 09:33 309 查看
最近做一个项目需要通过GPS获取经纬度,通过计算算出两点之间的距离。通过对Google和百度的疯狂轰炸,终于找到了解决的办法。
首先声明权限:
android:name="android.permission.ACCESS_FINE_LOCATION"

java代码如下:

/* 获取GPS定位 */
LocationManager locationManager = (LocationManager)
ListActivity.this.getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, new MobileLocationListener());

private class MobileLocationListener implements LocationListener {

@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub

}

@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub

}

@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub

}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
}
重点的来了,两点经纬度计算距离
private final double EARTH_RADIUS = 6378137.0;

private double gps2m(double lat_a, double lng_a, double lat_b, double lng_b) {
double radLat1 = (lat_a * Math.PI / 180.0);
double radLat2 = (lat_b * Math.PI / 180.0);
double a = radLat1 - radLat2;
double b = (lng_a - lng_b) * Math.PI / 180.0;
double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2)
+ Math.cos(radLat1) * Math.cos(radLat2)
* Math.pow(Math.sin(b / 2), 2)));
s = s * EARTH_RADIUS;
s = Math.Round(s * 10000) / 10000;
return s;
}


· Lat1 Lng1
表示A点经纬度,Lat2 Lng2
表示B点经纬度
· a=Lat1 – Lat2
为两点纬度之差 b=Lng1 -Lng2
为两点经度之差
· 6378.137为地球半径,单位为千米;计算出来的结果单位为千米

两点经纬度,计算方位角
/* 计算方位角pab */
private double gps2d(double lat_a, double lng_a, double lat_b, double lng_b) {
double d = 0;
lat_a=lat_a*Math.PI/180;
lng_a=lng_a*Math.PI/180;
lat_b=lat_b*Math.PI/180;
lng_b=lng_b*Math.PI/180;

d=Math.sin(lat_a)*Math.sin(lat_b)+Math.cos(lat_a)*Math.cos(lat_b)*Math.cos(lng_b-lng_a);
d=Math.sqrt(1-d*d);
d=Math.cos(lat_b)*Math.sin(lng_b-lng_a)/d;
d=Math.asin(d)*180/Math.PI;

d = Math.round(d*10000);
return d;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: