当前位置: 移动技术网 > IT编程>移动开发>Android > Android获取经纬度计算距离介绍

Android获取经纬度计算距离介绍

2019年07月24日  | 移动技术网IT编程  | 我要评论

李代沫,得瑟网,mp4

经度指示南北方向,纵向
纬度指示东西方向,横向

获取经纬度

使用gps权限:

复制代码 代码如下:

<uses-permission android:name="android.permission.access_fine_location"></uses-permission>

android提供locationmanager和location,可以方便的获得经纬度、海拔等位置。使用locationmanager来获得位置管理类,从而可以获得历史gps信息以及位置变化的监听注册;使用location来获得具体的位置信息。代码如下:

复制代码 代码如下:

locationm = (locationmanager) getsystemservice(location_service);
   criteria criteria = new criteria();
   criteria.setaccuracy(criteria.accuracy_fine);
   criteria.setaltituderequired(false);
   criteria.setbearingrequired(false);
   criteria.setcostallowed(true);
   criteria.setpowerrequirement(criteria.power_low);
   string provider = locationm.getbestprovider(criteria, true);

   location location = locationm.getlastknownlocation(provider);
       //获得上次的记录
   gps_loc(location);

   locationlistener gps_listener = new locationlistener() {
   //监听位置变化,实时获取位置信息
       @override
       public void onstatuschanged(string provider, int status,
              bundle extras) {
          // todo auto-generated method stub

       }

       @override
       public void onproviderenabled(string provider) {
          // todo auto-generated method stub

       }

       @override
       public void onproviderdisabled(string provider) {
          // todo auto-generated method stub

       }

       @override
       public void onlocationchanged(location location) {
          // todo auto-generated method stub
   //位置发生改变时
gps_loc(location);
}
};
locationm.requestlocationupdates(provider, 1000, 0, gps_listener);
}

// 获得自己位置
private void gps_loc(location location) {
   if (location != null) {
       self_weidu = location.getlatitude();
       self_jindu = location.getlongitude();
   } else {
       self_weidu = 0;
       self_jindu = 0;
   }
}

两点经纬度,计算距离

1.lat1 lung1 表示a点经纬度,lat2 lung2 表示b点经纬度;

2.a=lat1 – lat2 为两点纬度之差 b=lung1 -lung2 为两点经度之差;

3.6378.137为地球半径,单位为千米;

计算出来的结果单位为千米。

直接从google maps的脚本里扒了段代码。
maps的代码:计算的结果是米为单位。

复制代码 代码如下:

// 计算两点距离
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;
}

两点经纬度,计算方位角

计算方位角pab

其中lat_a, lng_a是a的纬度和经度; lat_b, lng_b是b的纬度和经度。代码如下:

复制代码 代码如下:

// 计算方位角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;
}

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网