你的位置:首页 > 操作系统

[操作系统]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")

效果:

下面我们来具体使用一下

第一步:在

这是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>

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

<??><RelativeLayout ="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技术交流