地图定位

Ø  知识点:注册服务、定位权限、监听、地图UI及相关参数设置

Ø  实现详情

1.      注册不同手机端定位服务:在application中注册

2.      设置定位监听及接口实现 

3.      地图自带图标、缩放工具条等设计以及设置相关定位选项

/**
 定位:地图定位功能
 */
setUpMapLocation();

private void setUpMapLocation() {
    aMap.setLocationSource(this);// 设置定位监听

    //初始化client
    locationClient = new AMapLocationClient(getApplicationContext());
    //设置定位参数
    locationClient.setLocationOption(getDefaultOption());

    aMap.getUiSettings().setZoomPosition(AMapOptions.ZOOM_POSITION_RIGHT_CENTER);//设置缩放控件在右边中间位置
    aMap.getUiSettings().setMyLocationButtonEnabled(true);// 设置默认定位按钮是否显示
    aMap.setMyLocationEnabled(true);//  设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false
    // 设置定位的类型为定位模式 ,可以由定位、跟随或地图根据面向方向旋转几种
    aMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE);

    locationClient.setLocationListener(this);//设置定位回调监听
    //启动定位
    locationClient.startLocation();
}

private AMapLocationClientOption getDefaultOption() {
    AMapLocationClientOption mOption = new AMapLocationClientOption();
    mOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//可选,设置定位模式,可选的模式有高精度、仅设备、仅网络。默认为高精度模式
    mOption.setGpsFirst(false);//可选,设置是否gps优先,只在高精度模式下有效。默认关闭
    mOption.setHttpTimeOut(30000);//可选,设置网络请求超时时间。默认为30秒。在仅设备模式下无效
    mOption.setInterval(2000);//可选,设置定位间隔。默认为2秒
    mOption.setNeedAddress(true);//可选,设置是否返回逆地理地址信息。默认是ture
    mOption.setOnceLocation(false);//可选,设置是否单次定位。默认是false
    mOption.setOnceLocationLatest(false);//可选,设置是否等待wifi刷新,默认为false.如果设置为true,会自动变为单次定位,持续定位时不要使用

    return mOption;
}

/**
 * 定位监听
 */
@Override
public void onLocationChanged(AMapLocation aMapLocation) {
    if (locationChangedListener != null && aMapLocation != null) {
        locationChangedListener.onLocationChanged(aMapLocation);//显示系统小蓝点*/
        if (aMapLocation.getErrorCode() == 0) {
            //定位成功回调信息,设置相关消息
            aMapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表

            latitude = aMapLocation.getLatitude();//获取经度
            longitude = aMapLocation.getLongitude();//获取纬度;

            aMapLocation.getAccuracy();//获取精度信息
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date date = new Date(aMapLocation.getTime());
            df.format(date);//定位时间
            aMapLocation.getAddress();//地址,如果option中设置isNeedAddress为false,则没有此结果
            aMapLocation.getCountry();//国家信息
            aMapLocation.getProvince();//省信息
            aMapLocation.getCity();//城市信息
            aMapLocation.getDistrict();//城区信息
            aMapLocation.getCityCode();//城市编码
            aMapLocation.getAdCode();//地区编码
        } else {
            //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
            Log.e("MainActivity", "location Error, ErrCode:"
                    + aMapLocation.getErrorCode() + ", errInfo:"
                    + aMapLocation.getErrorInfo());
        }
    }

}

/**
 * 启动定位
 */
@Override
public void activate(OnLocationChangedListener listener) {
    locationChangedListener = listener;

}

/**
 * 停止定位
 */
@Override
public void deactivate() {
    locationChangedListener = null;
    //销毁定位客户端
    if (locationClient != null) {
        locationClient.stopLocation();
        locationClient.onDestroy();
    }
    locationClient = null;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值