AndroidStudio下加入百度地图的使用 (三)——API基本方法及常量属性

  上一章中我们已经完成定位功能,这一章向大家介绍一下常用的方法及常量属性的意思。

(1) 手势方法

缩放: setZoomGesturesEnabled()

俯视: setOverlookingGesturesEnabled()

旋转:setRotateGesturesEnabled()

平移: setScrollGesturesEnabled()

(2) 地图模式方法

setMapType(常量)

常量1:普通地图BaiduMap. MAP_TYPE_NORMAL

常量2:卫星地图: BaiduMap.MAP_TYPE_SATELLITE

开启交通模式:mBaiduMap.setTrafficEnabled(true)

(3) 定位设置中用到的方法及常量

定位精度: new LocationClientOption().setLocationMode(常量)

常量1:高精度模式(GPS+Wifi+基站) LocationMode.Hight_Accuracy 

常量2:低功耗模式(Wifi+基站)      LocationMode. Battery_Saving

常量3:仅设备模式(GPS)             LocationMode. Device_Sensors

定位结果:

国家测绘局标准

  1. new LocationClientOption().setCoorType ("gcj02")

百度经纬度标准

  1. new LocationClientOption().setCoorType ("bd09ll")

百度墨卡托标准

  1. new LocationClientOption().setCoorType ("bd09")

效果:

下面我们来具体使用一下

第一步:在xml文件中加入服务的定义

这是SDK中自带的服务,只需如此定义即可

<service
            android:name="com.baidu.location.f"
            android:enabled="true"
            android:process=":remote" >
            <intent-filter>
                <action android:name="com.baidu.location.service_v2.2" >
                </action>
            </intent-filter>
</service>

第二步: 在上一章的布局中添加控件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >


    <CheckBox
        android:id="@+id/zoom"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:checked="true"
        android:onClick="setZoomEnable"
        android:text="缩放" />

    <CheckBox
        android:id="@+id/scroll"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:checked="true"
        android:onClick="setScrollEnable"
        android:text="平移"
        android:layout_below="@+id/rotate"
        android:layout_toRightOf="@+id/compass"
        android:layout_toEndOf="@+id/compass" />
    <CheckBox
        android:id="@+id/compass"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:checked="true"
        android:onClick="setCompassEnable"
        android:text="指南针"
        android:layout_below="@+id/zoom"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <CheckBox
        android:id="@+id/rotate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:checked="true"
        android:onClick="setRotateEnable"
        android:text="旋转"

        android:layout_alignParentTop="true"
        android:layout_toRightOf="@+id/zoom"
        android:layout_toEndOf="@+id/zoom" />

    <CheckBox
        android:id="@+id/overlook"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:checked="true"
        android:onClick="setOverlookEnable"
        android:text="俯视"
        android:layout_above="@+id/compass"
        android:layout_toRightOf="@+id/rotate"
        android:layout_toEndOf="@+id/rotate" />
    <com.baidu.mapapi.map.MapView
        android:id="@+id/MyMpView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:clickable="true"
        android:layout_below="@+id/scroll"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true" />
<RadioGroup
    android:id="@+id/radioButtonGroup"
    android:layout_width="wrap_content"
    android:orientation="horizontal"
    android:layout_height="wrap_content"

    android:layout_below="@+id/overlook"
    android:layout_toRightOf="@+id/scroll"
    android:layout_toEndOf="@+id/scroll">
    <RadioButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="普通"
        android:id="@+id/mapNormal"
   />

    <RadioButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="卫星"
        android:id="@+id/mapSate"
       />

</RadioGroup>

    <CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="交通"
        android:id="@+id/mapTraffic"
        android:onClick="setTrafficMap"
        android:layout_alignTop="@+id/radioButtonGroup"
        android:layout_toRightOf="@+id/radioButtonGroup"
        android:layout_toEndOf="@+id/radioButtonGroup" />
</RelativeLayout>

第三步: 在监听事件方法中设置地图的使用,Activity完整代码

package com.jerehedu.administrator.baidumapapplication;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;
import android.widget.RadioGroup;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationConfigeration;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.map.UiSettings;
import com.baidu.mapapi.model.LatLng;


public class UISettingDemo extends Activity {

    /**
     * MapView 是地图主控件
     */
    private MapView mMapView;
    private BaiduMap mBaiduMap;
    private UiSettings mUiSettings;
    private RadioGroup radioGroup;
    private CheckBox   trafficMap;
    private boolean firstLocation;
    private LocationClient locationClient;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        SDKInitializer.initialize(getApplicationContext());
        setContentView(R.layout.activity_uisetting);
        mMapView = (MapView) findViewById(R.id.MyMpView);
        radioGroup =(RadioGroup)findViewById(R.id.radioButtonGroup);
        trafficMap =(CheckBox)findViewById(R.id.mapTraffic);
        mBaiduMap = mMapView.getMap();
        mUiSettings = mBaiduMap.getUiSettings();
        //overlook 设置地图俯仰角
        MapStatus ms = new MapStatus.Builder().overlook(-30).build();
        MapStatusUpdate u = MapStatusUpdateFactory.newMapStatus(ms);
        mBaiduMap.animateMapStatus(u, 1000);

        radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                switch (checkedId){
                    case R.id.mapNormal:
                        //普通地图
                        mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
                        break;
                    case R.id.mapSate:
                        //卫星地图
                        mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
                        break;
                }
            }
        });
        locationSet();
    }

    /**
     * 是否启用缩放手势
     * 
     * @param v
     */
    public void setZoomEnable(View v) {
        mUiSettings.setZoomGesturesEnabled(((CheckBox) v).isChecked());
    }

    /**
     * 是否启用平移手势
     * 
     * @param v
     */
    public void setScrollEnable(View v) {
        mUiSettings.setScrollGesturesEnabled(((CheckBox) v).isChecked());
    }

    /**
     * 是否启用旋转手势
     * 
     * @param v
     */
    public void setRotateEnable(View v) {
        mUiSettings.setRotateGesturesEnabled(((CheckBox) v).isChecked());
    }

    /**
     * 是否启用俯视手势
     * 
     * @param v
     */
    public void setOverlookEnable(View v) {
        mUiSettings.setOverlookingGesturesEnabled(((CheckBox) v).isChecked());
    }
    /**
     * 交通地图模式
     *
     * @param v
     */
    public void setTrafficMap(View v){
        if (trafficMap.isChecked())
        {
            mBaiduMap.setTrafficEnabled(true);
        } else
        {
            mBaiduMap.setTrafficEnabled(false);
        }
    }
    /**
     * 是否启用指南针图层
     * 
     * @param v
     */
    public void setCompassEnable(View v) {
        mUiSettings.setCompassEnabled(((CheckBox) v).isChecked());
    }

    public void locationSet(){
        mBaiduMap = mMapView.getMap();
        MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15f);
        mBaiduMap.setMapStatus(msu);
        // 定位初始化
        locationClient = new LocationClient(this);
        firstLocation =true;
        // 设置定位的相关配置
        LocationClientOption option = new LocationClientOption();
        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
        option.setOpenGps(true);
        option.setCoorType("bd09ll"); // 设置坐标类型
        option.setScanSpan(1000);
        locationClient.setLocOption(option);

        // 设置自定义图标
        BitmapDescriptor myMarker = BitmapDescriptorFactory
                .fromResource(R.drawable.navi_map);
        MyLocationConfigeration config = new MyLocationConfigeration(
                MyLocationConfigeration.LocationMode.FOLLOWING, true, myMarker);
        locationClient.registerLocationListener(new BDLocationListener() {
            @Override
            public void onReceiveLocation(BDLocation location) {
                // map view 销毁后不在处理新接收的位置
                if (location == null || mMapView == null)
                    return;
                // 构造定位数据
                MyLocationData locData = new MyLocationData.Builder()
                        .accuracy(location.getRadius())
                                // 此处设置开发者获取到的方向信息,顺时针0-360
                        .direction(100).latitude(location.getLatitude())
                        .longitude(location.getLongitude()).build();
                // 设置定位数据
                mBaiduMap.setMyLocationData(locData);

                // 第一次定位时,将地图位置移动到当前位置
                if (firstLocation)
                {
                    firstLocation = false;
                    LatLng xy = new LatLng(location.getLatitude(),
                            location.getLongitude());
                    MapStatusUpdate status = MapStatusUpdateFactory.newLatLng(xy);
                    mBaiduMap.animateMapStatus(status);
                }
            }
        });
    }
    @Override
    protected void onStart()
    {
        // 如果要显示位置图标,必须先开启图层定位
        mBaiduMap.setMyLocationEnabled(true);
        if (!locationClient.isStarted())
        {
            locationClient.start();
        }
        super.onStart();
    }

    @Override
    protected void onStop()
    {
        // 关闭图层定位
        mBaiduMap.setMyLocationEnabled(false);
        locationClient.stop();
        super.onStop();
    }

    @Override
    protected void onPause() {
        // MapView的生命周期与Activity同步,
        // 当activity挂起时需调用MapView.onPause()
        mMapView.onPause();
        super.onPause();
    }

    @Override
    protected void onResume() {
        // MapView的生命周期与Activity同步,
        // 当activity恢复时需调用MapView.onResume()
        mMapView.onResume();
        super.onResume();
    }

    @Override
    protected void onDestroy() {
        // MapView的生命周期与Activity同步,
        // 当activity销毁时需调用MapView.destroy()
        mMapView.onDestroy();
        super.onDestroy();
    }

}
作者:杰瑞教育
出处:http://www.cnblogs.com/jerehedu/ 
版权声明:本文版权归杰瑞教育技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
技术咨询:JRedu技术交流
 
原文地址:https://www.cnblogs.com/jerehedu/p/4916408.html