欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2023-11-14 08:29:28
经度指示南北方向,纵向纬度指示东西方向,横向 获取经纬度 使用gps权限:复制代码 代码如下:

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

获取经纬度

使用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;
}