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;
}
首先声明权限:
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;
}
相关文章推荐
- Android获取经纬度、计算距离、方位角
- Android获取经纬度、计算距离、方位角
- Android获取经纬度、计算距离、方位角
- Android获取经纬度、计算距离、方位角
- Android获取经纬度、计算距离、方位角
- Android获取经纬度、计算距离、方位角
- Android地图 获取经纬度计算距离介绍
- Android获取经纬度计算距离介绍
- android获取附近蓝牙设备并计算距离
- 经纬度关系计算及相关知识(球面距离、方位角)
- 用百度地图API获取的经纬度信息计算两点距离(Mysql函数)
- 获取指定经纬度及当前位置经纬度,并计算两个位置之间的距离
- 百度地图自动提示,转经纬度,距离计算。
- h5获取经纬度,当前位置,并计算与另一个经纬度的距离 千米为单位
- android获取附近蓝牙设备并计算距离的实例代码
- Android GPS获取地理位置并计算距离
- Android Google Maps API 网络服务用于网络定位、计算路线、获取经纬度、获取详细地址等
- Android 根据经纬度计算方位角
- Android_通过两个点的经纬度计算距离
- android 两点经纬度计算距离