Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android獲取經緯度計算距離介紹

Android獲取經緯度計算距離介紹

編輯:關於Android編程

經度指示南北方向,縱向
緯度指示東西方向,橫向

獲取經緯度

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

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved