Android简单集成高德地图,完成定位计算距离功能

展示图.png
  1. 进入高德地图开放平台注册账号,创建应用。

  2. 注册创建应用之后为应用添加key值。

  3. 在应用中导入高德地图的第三方SDK,配置清单文件(注:为了适配Android6.0以上机型,需要使用动态权限申请)。

针对以上步骤高德开放平台中有详细的说明,下面是配置代码。

  1. 声明AMapLocationClient对象和AMapLocationClientOption对象
    //声明AMapLocationClient类对象
    public AMapLocationClient mLocationClient = null;
    //声明AMapLocationClientOption对象
    public AMapLocationClientOption mLocationOption = null;
public void getUserPoint() {
        //声明mLocationOption对象
        mLocationClient = new AMapLocationClient(this);
        //初始化定位参数
        mLocationOption = new AMapLocationClientOption();
        //设置单次定位
        mLocationOption.setOnceLocation(true);
        //获取最近3s内精度最高的一次定位结果:
        //设置setOnceLocationLatest(boolean b)接口为true,启动定位时SDK会返回最近3s内精度最高的一次定位结果。如果设置其为true,setOnceLocation(boolean b)接口也会被设置为true,反之不会,默认为false。
        mLocationOption.setOnceLocationLatest(true);
        //设置定位监听
        mLocationClient.setLocationListener(this);
        //设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式
        mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
        //设置定位间隔,单位毫秒,默认为2000ms
        mLocationOption.setInterval(2000);
        //设置定位参数
        mLocationClient.setLocationOption(mLocationOption);
        // 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,
        // 注意设置合适的定位时间的间隔(最小间隔支持为1000ms),并且在合适时间调用stopLocation()方法来取消定位请求
        // 在定位结束后,在合适的生命周期调用onDestroy()方法
        // 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除
        //启动定位
        mLocationClient.startLocation();
    }
  1. 配置完成之后设置请求结果回调获取当前定位的位置详情。
 @Override
    public void onLocationChanged(AMapLocation amapLocation){
        if (amapLocation != null) {
            if (amapLocation.getErrorCode() == 0) {
                //定位成功回调信息,设置相关消息
                amapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表
                double latitude = amapLocation.getLatitude();//获取纬度
                double longitude = amapLocation.getLongitude();//获取经度
                mPoint = new DPoint(latitude,longitude);
                loadData();//后续操作
            } else {
                //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
                Log.e("AmapError", "location Error, ErrCode:"
                        + amapLocation.getErrorCode() + ", errInfo:"
                        + amapLocation.getErrorInfo());
            }
        }
    }

从上面的方法中我获取到了当前用户的位置信息,并从中取出当前经纬度,声明一个坐标对象,DPoint mPoint = new DPoint(latitude,longitude)。
如果要求出两点之间的距离,同样也要将目标位置声明成一个DPoint对象,然后调用SDK中的方法

CoordinateConverter.calculateLineDistance(userPoint, dPoint);
// userPoint      我的点
// dPoint         目标点
float distance = CoordinateConverter.calculateLineDistance(userPoint, dPoint);
mDistance.setText("距您"+(int) distance + "m");

这样就能得出自己与目标点间的距离了,更多详细参数和设置方法可以参考API。
后续我还会分享一下在 Android 6.0 以上如何适配同时动态申请多个权限。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,890评论 18 139
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,510评论 0 17
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,760评论 18 399
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,142评论 25 708
  • 通过猎头换工作,从猎头公司获得面试机会,与直接应聘相比,有何优势?海纳英才整理总结----- 助理顾问: 首先,你...
    静水儿流深阅读 15,924评论 0 1