地球赤道上环绕地球一周走一圈共40075.04公里,而@一圈分成360°,而每1°(度)有60,每一度一秒在赤道上的长度计算如下:   40075.04km/360°=111.31955km   

111.31955km/60=1.8553258km=1855.3m

任意两点距离计算公式见代码:

package org.wavefar.lib.utils;import android.content.Context;import com.baidu.location.BDAbstractLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.navi.BaiduMapAppNotSupportNaviException;
import com.baidu.mapapi.navi.BaiduMapNavigation;
import com.baidu.mapapi.navi.NaviParaOption;
import com.baidu.mapapi.utils.poi.BaiduMapPoiSearch;
import com.baidu.mapapi.utils.route.BaiduMapRoutePlan;
import com.baidu.mapsdkplatform.comapi.location.CoordinateType;import org.wavefar.lib.utils.LogUtil;
import org.wavefar.lib.utils.StringUtil;/*** 定位相关工具类* @author summer*/
public class LocationUtil {private LocationClient  mLocationClient;private BDAbstractLocationListener mlistener;private Context context;// 地球半径private final static double EARTH_RADIUS = 6378.137;public LocationUtil(Context context) {this.context = context;mLocationClient = new LocationClient(context.getApplicationContext());LocationClientOption option = initLocationOption();mLocationClient.setLocOption(option);LogUtil.d(LocationUtil.class.getSimpleName(), "当前定位库版本" + mLocationClient.getVersion());}private LocationClientOption initLocationOption() {LocationClientOption option = new LocationClientOption();// 设置定位模式option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);// 返回的定位结果是百度经纬度,默认值gcj02option.setCoorType(CoordinateType.BD09LL);// 设置发起定位请求的间隔时间为5000msoption.setScanSpan(5000);// 返回的定位结果包含地址信息option.setIsNeedAddress(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到option.setIsNeedLocationPoiList(true);// 返回的定位结果包含手机机头的方向option.setNeedDeviceDirect(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”option.setIsNeedLocationDescribe(true);option.setOpenGps(true);return option;}/*** 注册定位回调* @param listener*/public void registerLocationListener(BDAbstractLocationListener listener) {mlistener = listener;if (mlistener != null) {mLocationClient.registerLocationListener(mlistener);}}/*** 启动定位*/public void start() {if (mLocationClient.isStarted()) {return;}mLocationClient.start();}/*** 重新定位*/public void reStart() {if (mLocationClient.isStarted()) {return;}mLocationClient.restart();}/*** 停止定位*/public void stop() {if (mLocationClient.isStarted()) {mLocationClient.stop();}}/*** 销毁定位*/public void destroy() {if (mLocationClient != null) {mLocationClient.unRegisterLocationListener(mlistener);mLocationClient.stop();mLocationClient = null;}}/*** 启动百度地图导航(Native),如果本地没有安装百度地图,调用WEBAPP* @param pt1 起点* @param pt2 终点*/public void startNavi(LatLng pt1, LatLng pt2) {// 构建 导航参数NaviParaOption para = new NaviParaOption().startPoint(pt1).endPoint(pt2);try {BaiduMapNavigation.openBaiduMapNavi(para, context);} catch (BaiduMapAppNotSupportNaviException e) {BaiduMapNavigation.openWebBaiduMapNavi(para, context);e.printStackTrace();}}/*** 启动百度地图导航(Web)*/public void startWebNavi(LatLng pt1,LatLng pt2) {NaviParaOption para = new NaviParaOption().startPoint(pt1).endPoint(pt2);BaiduMapNavigation.openWebBaiduMapNavi(para, context);}/*** 用完导航后需要调用该函数销毁*/public void stopNavi() {try {BaiduMapNavigation.finish(context);BaiduMapRoutePlan.finish(context);BaiduMapPoiSearch.finish(context);} catch (Exception e) {e.printStackTrace();}}private static double rad(double d) {return d * Math.PI / 180.0;}/*** 计算距离 返回单位km* @param lat1* @param lng1* @param lat2* @param lng2* @return*/public static double getDistance(double lat1, double lng1, double lat2,double lng2) {LogUtil.d("LocationUtil", "lat1:" + lat1 + "lng1:" + lng1 + "lat2:" + lat2 + "lng2:" + lng2);double radLat1 = rad(lat1);double radLat2 = rad(lat2);// 如果有一方等于零,直接返回0if (radLat1 == 0 || radLat2 == 0) {return 0;}double a = radLat1 - radLat2;double b = rad(lng1) - rad(lng2);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;}/*** 距离格式化** @param distance 以千米为单位* @return*/public static String distanceKMFormat(double distance) {return distance > 1 ? (distance + "KM") : (distance * 1000 + "M");}/*** 距离只保留两位小数* @param distance 以米为单位* @return*/public static String distanceFormat(double distance) {String str;double value = distance;if (distance >= 1000) {value = value / 1000;str = "KM";} else {str = "M";}return String.format("%s%s",StringUtil.formatDecimal(value,null),str);}}

以上代码定位依赖于百度定位API,所以粘贴以上代码之前,需要引入百度定位API,引入百度定位API不在这里介绍,自行去百度定位官方查看;

Android 常用的地球经纬度转换公里(km)计算工具类相关推荐

  1. 【Android 插件化】Hook 插件化框架 ( 反射工具类 | 反射常用操作整理 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  2. java 获取两条经纬度线段的交点坐标工具类

    java 获取两条经纬度线段的交点坐标工具类 网上有线段是否相交的判断方法,但是很少有获取线段交点的坐标的方法 我在这里整合了网上的一些相交的方法,通过相交的xy轴点返推出了经纬度. 拾取坐标系统 可 ...

  3. Android旋转视频工具类,Android开发实现的IntentUtil跳转多功能工具类【包含视频、音频、图片、摄像头等操作功能】...

    本文实例讲述了Android开发实现的IntentUtil跳转多功能工具类.分享给大家供大家参考,具体如下: 说明:此工具类是本人开发中总结下来的,还有其它的跳转亲给我留言,希望大家一起把这个工具类打 ...

  4. 常用的数学计算工具类

    package com.xutil.math;import java.math.BigDecimal;/*** @title 数学计算工具类* @author Xingbz* @createDate ...

  5. Android拍照相册相关的图片获取与剪切工具类

    整理的常用的获取拍照缩略图,原图,剪切图,获取相册的原图与剪切图,图片的缩放(一般上传服务器会用到),URI Bitmap File直接的转换关系.使用简单方便: 有完整Demo 如有需要请留下邮箱 ...

  6. android dialog 隐藏状态栏_Android开发不得不收集的工具类集合

    嗨,你终于来啦 ~ 等你好久啦~ 喜欢的小伙伴欢迎关注,我会定期分享Android知识点及解析,还会不断更新的BATJ面试专题,欢迎大家前来探讨交流,如有好的文章也欢迎投稿.更新了几天Android基 ...

  7. android 动态录音权限,Android如何判断手机是否有录音权限的工具类

    作用 判断手机是否有录音权限的工具类,兼容6.0以上以及以下android系统 测试环境 这篇文章是评论中的网友提出质疑后,经过重写修改与重写测试后编写的,我的调试环境是小米note3,Android ...

  8. Android开发之Base64与bitmap互转的工具类

    老套路先看效果图: 如上图:分别是bitmap转base64和base64转bitmap 直接上代码.看工具类 package com.example.apidemo.util; /** Copyri ...

  9. android 蓝牙低功耗(BLE)非常棒的工具类,获取小米手环的步数

    现在物联网搞的轰轰烈烈的,小米的手环等一系列产品,下面我们就来研究一下小米手环的记步功能 工具类 package com.zsl.bluetoothdemo.ble;import android.bl ...

最新文章

  1. Re-ID新方法VPM
  2. 离2006年考研还有一个月
  3. 将JPG文件作为EXE执行
  4. kylin备份元数据(用于清除不用的数据方式)
  5. ASP.NET Core Web API 最小化项目
  6. 参加双车项目的一些感触
  7. php的Apa红灯_macos – 使用自制软件更新php和mysql后的apa...
  8. linux内核那些事之Memory protection keys(硬件原理)
  9. 网易云音乐ubuntu 18.04下无法打开的解决办法
  10. 深圳联通与深圳中琛源科技正式达成了5Gn战略合作
  11. ubuntu apt-get 安装软件时自动yes
  12. react实现异步插件_初识react(四) react中异步解决方案之 redux-saga
  13. C语言向文件写入学生信息并读取显示出来
  14. 为计算机快捷方式是什么原因,为什么我的电脑界面上的东西都变成快捷方式??...
  15. 【安卓】三星手机刷机教程
  16. Python数据分析与应用(一)
  17. 离散数学-7 二元关系
  18. Android Camera2 对焦梳理
  19. 阿里CTO程立:科技公司的技术创新和责任担当
  20. ArcGIS 10.2.2支持无损CityGML格式进行3D城市建模

热门文章

  1. 携程Apollo(阿波罗)配置中心本地开发模式不接入配置中心进行本地开发
  2. missing required icon file.图标错误解决
  3. 小技巧:帮你批量删除代码前的行号
  4. shell安装samba服务
  5. oracle之分析函数over及开窗函数
  6. 090621 NTFS删除的恢复
  7. jsp定义一个变量在html,jsp中变量及方法的声明与使用说明
  8. 铃木dl250参数_铃木DL250,铃木GSX250,铃木GW250重量多少?哪款最值得买?
  9. matlab中gui关闭图像直方图,07年写的,直方图 matlab gui
  10. uc扩展中心打不开_如何享用chorme扩展