Android高德地图开发(3)——路况+定位

在上篇的基础上,我们继续添加路况和定位功能:

1.路况图层显示

高德地图封装了交通路况信息,通过调用AMap 类的方法setTrafficEnabled(),显示路况信息。
在fragment_map中添加路况图层控制按钮



在initMap的setUpMap()方法中控制路况图层:

//路况图层触发事件
mCBLouk.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        //判断路况图层是否显示
        if (mCBLouk.isChecked()){
            aMap.setTrafficEnabled(true);
            mCBLouk.setBackgroundColor(getResources().getColor(R.color.light_gery));
            mCBLouk.setButtonDrawable(getResources().getDrawable(R.drawable.map_traffic_hl));
        }else{
            aMap.setTrafficEnabled(false);
            mCBLouk.setBackgroundColor(getResources().getColor(R.color.light_gery));
            mCBLouk.setButtonDrawable(getResources().getDrawable(R.drawable.map_traffic));
        }

    }
});

2.定位

2.0以上版本的定位和百度定位类似,专门开启了一个服务去定位,下面主要介绍2.0以上版本的定位:

2.1 首先在manifest.xml文件中配置服务

 

2.2 在setUpMap(参考上篇)函数中加载startPostion()方法,开始请求定位。

 /**
 * 开始定位
 */
public void startPostion() {
    // 初始化定位,
    mlocationClient = new AMapLocationClient(getActivity().getApplicationContext());
    // 初始化定位参数
    mLocationOption = new AMapLocationClientOption();
    //单次定位
    mLocationOption.setOnceLocation(true);
    // 设置定位模式为高精度定位
    mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
    // 设置定位回调监听
    mlocationClient.setLocationListener(this);
    // 设置定位参数
    mlocationClient.setLocationOption(mLocationOption);
    //请求位置
    mlocationClient.startLocation();
}

/**
 * long类型时间格式化
 */
public  String convertToTime(long time) {
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date date = new Date(time);
    return df.format(date);
}

2.2 在onLocationChanged中返回定位数据,然后在地图上标注定位图标。

 /**
 * 混合定位回调函数
 */
@Override
public void onLocationChanged(AMapLocation location) {
    if (location != null && location.getErrorCode() == 0) {
        Double geoLat = location.getLatitude();
        Double geoLng = location.getLongitude();

        mMarkerA.setPosition(new LatLng(geoLat, geoLng));
        u = CameraUpdateFactory.newLatLngZoom(new LatLng(geoLat, geoLng), 18);
        aMap.animateCamera(u);
        String cityCode = "";
        String desc = "";
        Bundle locBundle = location.getExtras();
        if (locBundle != null) {
            cityCode = locBundle.getString("citycode");
            desc = locBundle.getString("desc");
        }
        String str = ("定位成功:(" + geoLng + "," + geoLat + ")"
                + "\n精    度    :" + location.getAccuracy() + "米"
                + "\n定位方式:" + location.getProvider() + "\n定位时间:"
                + convertToTime(location.getTime()) + "\n城市编码:"
                + cityCode + "\n位置描述:" + desc + "\n省:"
                + location.getProvince() + "\n市:" + location.getCity()
                + "\n区(县):" + location.getDistrict() + "\n区域编码:" + location
                .getAdCode());
    } else {

    }

}

2.3 退出时,停止定位服务。

@Override
public void onPause() {
    super.onPause();
    // 停止定位
    mlocationClient.stopLocation();
}

public void onDestroy() {
    mlocationClient.onDestroy();
    super.onDestroy();
}

你可能感兴趣的:(GIS应用开发,android)