Android 自动获取经纬度,计算距离、经纬度、方位角
最近做一个项目需要通过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;
}
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。