【原】Android高德地圖開發——路況+定位

在上篇的基礎上,咱們繼續添加路況和定位功能:android

1.路況圖層顯示

高德地圖封裝了交通路況信息,經過調用AMap 類的方法setTrafficEnabled(),顯示路況信息。git

fragment_map中添加路況圖層控制按鈕api

<!--路況圖層控制按鈕-->
    <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()方法中控制路況圖層:ide

//路況圖層觸發事件
    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文件中配置服務this

<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中返回定位數據,而後在地圖上標註定位圖標。spa

 /**
     * 混合定位回調函數
     */
    @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 退出時,中止定位服務。code

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

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

 轉載,請註明出處

相關文章
相關標籤/搜索