美文网首页Android知识Android开发经验谈Android开发
Android简单集成高德地图,完成定位计算距离功能

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

作者: 进击的阿达 | 来源:发表于2017-06-27 17:28 被阅读498次
    展示图.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 以上如何适配同时动态申请多个权限。

    相关文章

      网友评论

        本文标题:Android简单集成高德地图,完成定位计算距离功能

        本文链接:https://www.haomeiwen.com/subject/vwvecxtx.html