您的位置:首页 > 移动开发 > Android开发

Android开发百度SDK的使用--定位图层的使用

2014-11-28 18:01 435 查看
      在上一篇博客中对Android中调用百度的SDK的设置,以及简单的定位功能做了笔记,这次来记录一下如何使用百度地图接口的定位图层,ps:版本号V3.2

      1. 首先我们在使用百度SDK各组件之前需要初始化context信息并传入ApplicationContext中,这里在我的Application的onCreate方法中进行该步骤:

@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
// 在使用 SDK 各组间之前初始化 context 信息,传入 ApplicationContext
SDKInitializer.initialize(this);
}
        2. 第二步,来加载显示地图的控件,这里我在布局文件中直接加载
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true" />
         3. 获取BaiduMap对象,对MapView进行设置
mBaiduMap = mMapView.getMap();//得到一个BaiduMap对象
mBaiduMap.setMyLocationEnabled(true);//打开定位图层
             在定位操作同上一篇博客,在定位回调接口中对BaiduMap进行设置
mLocClient.registerLocationListener(new BDLocationListener() {

@Override
public void onReceiveLocation(BDLocation location) {
// TODO Auto-generated method stub
if (location == null || mMapView == null)
return;
mTextView.setText("当前位置:"+location.getAddrStr());
MyLocationData locData = new MyLocationData.Builder()
.accuracy(location.getRadius())
// 此处设置开发者获取到的方向信息,顺时针0-360
.direction(100).latitude(location.getLatitude())
.longitude(location.getLongitude()).build();
mBaiduMap.setMyLocationData(locData);
LatLng ll = new LatLng(location.getLatitude(), location
.getLongitude());
mUpdate = MapStatusUpdateFactory.newLatLngZoom(ll, 14);
mBaiduMap.animateMapStatus(mUpdate);
//mCurrentMarker = BitmapDescriptorFactory.fromResource(R.drawable.icon_geo);
mBaiduMap
.setMyLocationConfigeration(new MyLocationConfiguration(
LocationMode.NORMAL, true, null));
}
});
               关于地图的设置进行一些说明:

              1)在setMyLocationConfigeration方法中可以设置地图的模式:对于传入参数的MyLocationConfiguration中LocationMode.NORMAL表示正常模式,LocationMode.COMPASS表示使用罗盘模式,LocationMode.FOLLOWING表示跟随模式

              2)设置显示当前定位点的图标,MyLocationConfiguration构造参数中第二个boolean值表示是否显示定位当前点图标,第三个参数表示个人设置的图标,null表示使用默认图标,如果我们想要修改可以使用 BitmapDescriptorFactory.fromResource(R.drawable.icon_geo)帮助我们创建自己图标(一个BitmapDescriptor对象),并将其传入MyLocationConfiguration构造函数

         4. 管理MapView:在百度SDK中对MapView定义了类似Activity的生命周期函数,方便我们的管理

@Override
protected void onPause() {
mMapView.onPause();
super.onPause();
}

@Override
protected void onResume() {
mMapView.onResume();
super.onResume();
}

@Override
protected void onDestroy() {
// 退出时销毁定位
mLocClient.stop();
// 关闭定位图层
mBaiduMap.setMyLocationEnabled(false);
mMapView.onDestroy();
mMapView = null;
super.onDestroy();
}
附上源码:
package com.example.gymapp;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationConfiguration;
import com.baidu.mapapi.map.MyLocationConfiguration.LocationMode;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.model.LatLng;

public class MainActivity extends Activity {

LocationClient mLocClient;
BitmapDescriptor mCurrentMarker;

MapView mMapView;
BaiduMap mBaiduMap;
private MapStatusUpdate mUpdate;

private TextView mTextView;
private Button loactionButton;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mMapView = (MapView) findViewById(R.id.bmapView);
loactionButton = (Button) findViewById(R.id.button1);
mTextView = (TextView) findViewById(R.id.textView1);
mBaiduMap = mMapView.getMap();
mBaiduMap.setMyLocationEnabled(true);

mLocClient = new LocationClient(this);
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);
option.setCoorType("bd09ll");
option.setIsNeedAddress(true);
mLocClient.setLocOption(option);

mLocClient.registerLocationListener(new BDLocationListener() {

@Override
public void onReceiveLocation(BDLocation location) {
// TODO Auto-generated method stub
if (location == null || mMapView == null)
return;
mTextView.setText("当前位置:"+location.getAddrStr());
MyLocationData locData = new MyLocationData.Builder()
.accuracy(location.getRadius())
// 此处设置开发者获取到的方向信息,顺时针0-360
.direction(100).latitude(location.getLatitude())
.longitude(location.getLongitude()).build();
mBaiduMap.setMyLocationData(locData);
LatLng ll = new LatLng(location.getLatitude(), location
.getLongitude());
mUpdate = MapStatusUpdateFactory.newLatLngZoom(ll, 14);
mBaiduMap.animateMapStatus(mUpdate);
//mCurrentMarker = BitmapDescriptorFactory.fromResource(R.drawable.icon_geo);
mBaiduMap
.setMyLocationConfigeration(new MyLocationConfiguration(
LocationMode.FOLLOWING, true, null));
}
});
mLocClient.start();
loactionButton.setText("定位");
loactionButton.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
mLocClient.requestLocation();
}
});
}

@Override
protected void onPause() {
mMapView.onPause();
super.onPause();
}

@Override
protected void onResume() {
mMapView.onResume();
super.onResume();
}

@Override
protected void onDestroy() {
// 退出时销毁定位
mLocClient.stop();
// 关闭定位图层
mBaiduMap.setMyLocationEnabled(false);
mMapView.onDestroy();
mMapView = null;
super.onDestroy();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: