源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2022-07-11 11:38 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Android获取经纬度计算距离介绍
经度指示南北方向,纵向 纬度指示东西方向,横向 [b]获取经纬度[/b] 使用GPS权限:
[u]复制代码[/u] 代码如下:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
Android提供LocationManager和Location,可以方便的获得经纬度、海拔等位置。使用LocationManager来获得位置管理类,从而可以获得历史GPS信息以及位置变化的监听注册;使用Location来获得具体的位置信息。代码如下:
[u]复制代码[/u] 代码如下:
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的代码:计算的结果是米为单位。
[u]复制代码[/u] 代码如下:
// 计算两点距离 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的纬度和经度。代码如下:
[u]复制代码[/u] 代码如下:
// 计算方位角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; }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部