【原】Android高德地图开发——路况+定位

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

1.路况图层显示

高德地图封装了交通路况信息,通过调用AMap 类的方法setTrafficEnabled(),显示路况信息。

fragment_map中添加路况图层控制按钮

<!--路况图层控制按钮-->
    <CheckBox
        android:id="@+id/louk_btn"
        android:layout_margin="20dp"
        android:layout_alignParentRight="true"
        android:layout_width="52dp"
        android:button="@color/transparent"
        android:background="@drawable/map_traffic"
        android:layout_height="52dp" />

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文件中配置服务

<service android:name="com.amap.api.location.APSService"></service>

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();
    }

 转载,请注明出处

posted @ 2015-12-08 14:46  IIGEOywq  阅读(1405)  评论(0编辑  收藏  举报