android中使用百度定位sdk实时的计算移动距离,安卓面试宝典

这篇博客介绍了在Android中如何使用百度定位SDK实时计算移动距离。通过检查移动数据的正确性和位置的有效性,实现了在应用中监测车辆移动并更新数据库中的行驶距离。涉及到了BDLocationListener、DistanceComputeInterface和数据库操作。
摘要由CSDN通过智能技术生成
  1. return false;

  2. }

  3. /**

  4. * 检测是否在正确的移动

  5. *

  6. * @param distance

  7. * @return

  8. */

  9. private boolean checkProperMove(float distance){

  10. if(distance <= 0.1 * discard){

  11. return true;

  12. }else{

  13. return false;

  14. }

  15. }

  16. /**

  17. * 检测获取的数据是否是正常的

  18. *

  19. * @param location

  20. * @return

  21. */

  22. private boolean checkProperLocation(BDLocation location){

  23. if (location != null && location.getLatitude() != 0 && location.getLongitude() != 0){

  24. return true;

  25. }

  26. return false;

  27. }

  28. @Override

  29. public String call() throws Exception {

  30. synchronized (lock) {

  31. if (!checkProperLocation(location)){

  32. LogUtil.info(LocationService.class, “location data is null”);

  33. discard++;

  34. return null;

  35. }

  36. if (MyApplication.orderDealInfoId != -1) {

  37. DistanceInfo mDistanceInfo = mDistanceInfoDao.getById(MyApplication.orderDealInfoId);   //根据MainActivity中赋值的全局id查询数据库的值

  38. if(mDistanceInfo != null)       //不为空则说明车已经开始行使,并可以获得经纬度,计算移动距离

  39. {

  40. LogUtil.info(LocationService.class, “行驶中…”);

  41. GpsLocation tempGpsLocation = BDLocation2GpsUtil.convertWithBaiduAPI(location);     //位置转换

  42. if (tempGpsLocation != null) {

  43. currentGpsLocation = tempGpsLocation;

  44. }else{

  45. discard ++;

  46. }

  47. //日志

  48. String logMsg = “(plat:—>” + prevGpsLocation.lat + "  plgt:—>" + prevGpsLocation.lng +“)\n” +

  49. “(clat:—>” + currentGpsLocation.lat + "  clgt:—>" + currentGpsLocation.lng + “)”;

  50. LogUtil.info(LocationService.class, logMsg);

  51. /** 计算距离  */

  52. float distance = 0.0f;

  53. DistanceComputeInterface distanceComputeInterface = DistanceComputeImpl.getInstance();  //计算距离类对象

  54. distance = (float) distanceComputeInterface.getLongDistance(prevGpsLocation.lat,prevGpsLocation.lng,

  55. currentGpsLocation.lat,currentGpsLocation.lng);     //移动距离计算

  56. if (!noMove(distance)) {                //是否在移动

  57. if (checkProperMove(distance)) {    //合理的移动

  58. float drivedDistance = mDistanceInfo.getDistance();

  59. mDistanceInfo.setDistance(distance + drivedDistance); //拿到数据库原始距离值, 加上当前值

  60. mDistanceInfo.setLongitude(currentGpsLocation.lng);   //经度

  61. mDistanceInfo.setLatitude(currentGpsLocation.lat);    //纬度

  62. //日志记录

  63. FileUtils.saveToSDCard(FILE_NAME,“移动距离—>:”+distance+drivedDistance+“\n”+“数据库中保存的距离”+mDistanceInfo.getDistance());

  64. mDistanceInfoDao.updateDistance(mDistanceInfo);

  65. discard = 1;

  66. }

  67. }

  68. prevGpsLocation = currentGpsLocation;

  69. }

  70. }

  71. return null;

  72. }

  73. }

  74. }

  75. /**

  76. * 定位SDK监听函数

  77. */

  78. public class MyLocationListenner implements BDLocationListener {

  79. @Override

  80. public void onReceiveLocation(BDLocation location) {

  81. executor.submit(new Task(location));

  82. LogUtil.info(LocationService.class, “经度:”+location.getLongitude());

  • 27
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值