欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android獲取經(jīng)緯度計(jì)算距離介紹

 更新時(shí)間:2014年01月11日 14:07:55   作者:  
Android提供LocationManager和Location,可以方便的獲得經(jīng)緯度、海拔等位置。使用LocationManager來(lái)獲得位置管理類,從而可以獲得歷史GPS信息以及位置變化的監(jiān)聽注冊(cè);使用Location來(lái)獲得具體的位置信息

經(jīng)度指示南北方向,縱向
緯度指示東西方向,橫向

獲取經(jīng)緯度

使用GPS權(quán)限:

復(fù)制代碼 代碼如下:

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

Android提供LocationManager和Location,可以方便的獲得經(jīng)緯度、海拔等位置。使用LocationManager來(lái)獲得位置管理類,從而可以獲得歷史GPS信息以及位置變化的監(jiān)聽注冊(cè);使用Location來(lái)獲得具體的位置信息。代碼如下:

復(fù)制代碼 代碼如下:

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() {
   //監(jiān)聽位置變化,實(shí)時(shí)獲取位置信息
       @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
   //位置發(fā)生改變時(shí)
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;
   }
}

兩點(diǎn)經(jīng)緯度,計(jì)算距離

1.Lat1 Lung1 表示A點(diǎn)經(jīng)緯度,Lat2 Lung2 表示B點(diǎn)經(jīng)緯度;

2.a=Lat1 – Lat2 為兩點(diǎn)緯度之差 b=Lung1 -Lung2 為兩點(diǎn)經(jīng)度之差;

3.6378.137為地球半徑,單位為千米;

計(jì)算出來(lái)的結(jié)果單位為千米。

直接從google maps的腳本里扒了段代碼。
maps的代碼:計(jì)算的結(jié)果是米為單位。

復(fù)制代碼 代碼如下:

// 計(jì)算兩點(diǎn)距離
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;
}

兩點(diǎn)經(jīng)緯度,計(jì)算方位角

計(jì)算方位角pab

其中l(wèi)at_a, lng_a是A的緯度和經(jīng)度; lat_b, lng_b是B的緯度和經(jīng)度。代碼如下:

復(fù)制代碼 代碼如下:

// 計(jì)算方位角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;
}

相關(guān)文章

最新評(píng)論