zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

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

Android计算 获取 介绍 距离 经纬度
2023-06-13 09:15:15 时间

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

获取经纬度

使用GPS权限:

复制代码代码如下:

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

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

复制代码代码如下:


locationm=(LocationManager)getSystemService(LOCATION_SERVICE);
  Criteriacriteria=newCriteria();
  criteria.setAccuracy(Criteria.ACCURACY_FINE);
  criteria.setAltitudeRequired(false);
  criteria.setBearingRequired(false);
  criteria.setCostAllowed(true);
  criteria.setPowerRequirement(Criteria.POWER_LOW);
  Stringprovider=locationm.getBestProvider(criteria,true);

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

  LocationListenerGPS_listener=newLocationListener(){
  //监听位置变化,实时获取位置信息
      @Override
      publicvoidonStatusChanged(Stringprovider,intstatus,
             Bundleextras){
         //TODOAuto-generatedmethodstub

      }

      @Override
      publicvoidonProviderEnabled(Stringprovider){
         //TODOAuto-generatedmethodstub

      }

      @Override
      publicvoidonProviderDisabled(Stringprovider){
         //TODOAuto-generatedmethodstub

      }

      @Override
      publicvoidonLocationChanged(Locationlocation){
         //TODOAuto-generatedmethodstub
  //位置发生改变时
gps_loc(location);
}
};
locationm.requestLocationUpdates(provider,1000,0,GPS_listener);
}

//获得自己位置
privatevoidgps_loc(Locationlocation){
  if(location!=null){
      self_weidu=location.getLatitude();
      self_jindu=location.getLongitude();
  }else{
      self_weidu=0;
      self_jindu=0;
  }
}

两点经纬度,计算距离

1.Lat1Lung1表示A点经纬度,Lat2Lung2表示B点经纬度;

2.a=Lat1?Lat2为两点纬度之差b=Lung1-Lung2为两点经度之差;

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

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

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

复制代码代码如下:
//计算两点距离
privatefinaldoubleEARTH_RADIUS=6378137.0;
privatedoublegps2m(doublelat_a,doublelng_a,doublelat_b,doublelng_b){
doubleradLat1=(lat_a*Math.PI/180.0);
doubleradLat2=(lat_b*Math.PI/180.0);
doublea=radLat1-radLat2;
doubleb=(lng_a-lng_b)*Math.PI/180.0;
doubles=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;
returns;
}

两点经纬度,计算方位角

计算方位角pab

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

复制代码代码如下:
//计算方位角pab。
privatedoublegps2d(doublelat_a,doublelng_a,doublelat_b,doublelng_b){
doubled=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);
returnd;
}