Android获取经纬度计算距离介绍
经度指示南北方向,纵向
纬度指示东西方向,横向
获取经纬度
使用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;
}
相关文章
- 聚焦 Android 11: 大功告成
- Android telephony_android获取真实时间
- Android加密之全盘加密
- 代码加密 android,Android 开发怎样做代码加密或混淆「建议收藏」
- android移动点餐系统内容和要求,基于Android云计算的移动点餐系统
- android 模拟器 haxm,Android模拟器不使用HAXM
- 测试android sdk是否安装成功,配置Android SDK
- androidX_android targetSdkVersion
- Android面试每日一题(2): 一般什么情况下会导致内存泄漏问题?
- Android触摸事件_android设置按钮点击事件
- Android mtk_Android开发app
- android跳转到相册需要权限,Android打开相册获取图片路径[通俗易懂]
- Android SDK Tools_android.intent.category.DEFAULT
- 【Android FFMPEG 开发】FFMPEG 音频重采样 ( 初始化音频重采样上下文 SwrContext | 计算音频延迟 | 计算输出样本个数 | 音频重采样 swr_convert )
- 【Android 内存优化】自定义组件长图组件 ( 获取图像宽高 | 计算解码区域 | 设置图像解码属性 复用 像素格式 | 图像绘制 )
- 【错误记录】Android Studio 运行报错 ( There is not enough memory to perform the requested operation. )
- 【ijkplayer】编译 Android 版本的 ijkplayer ⑤ ( 执行 init-android-libyuv.sh | 执行 init-android-soundtouch.sh )
- Android动态布局入门及NinePatchChunk解密
- Android开发中遇到的问题(二)——新建android工程的时候eclipse没有生成MainActivity和layout布局详解手机开发
- Android Studio 导入项目 出现安装Error:Cause: failed to find target with hash string ‘android-23’ 等错误详解手机开发
- Android中的ProgressBar的android:indeterminate详解手机开发
- Android多线程实现文件断点下载详解编程语言
- 安卓编年史(28):Android 5.0 Lollipop——有史以来最重要的安卓版本(2)
- Android 9.0 概览
- Connecting Android to Oracle: The Ultimate Guide for Seamless Integration.(android连接oracle)
- 解析Android横竖屏切换的问题