使用百度地图实现基本的地图显示与定位功能

最近在项目中用到了地图显示与定位功能,那么毫无疑问首选百度地图,关于百度地图的基本使用在其官网介绍的十分详细,而且还附带程序Demo代码供大家参考。链接:点击打开链接。注意在自己的项目中使用百度地图需要先注册一个百度开发者账号,然后通过一些配置操作获取一个keyStore。这个不难,但是过程很琐碎,大家可以参照百度地图API官网的步骤一步一步来,这里就不详细叙述,下面给出自己项目中使用百度地图定位功能的核心代码。


public class MainActivity extends Activity {

	private MapView mMapView;
	private BaiduMap bdMap;
	public LocationClient mLocationClient = null;
	boolean firstLoc=true; //是否首次定位
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
      //在使用SDK各组件之前初始化context信息,传入ApplicationContext  
        //注意该方法要再setContentView方法之前实现  
        SDKInitializer.initialize(getApplicationContext());  
        setContentView(R.layout.activity_main); 
        initView();
        initData();

    }


    void initView()
    {
    	  mMapView = (MapView) findViewById(R.id.bmapView);
    	  bdMap = mMapView.getMap();
    }
    void initData()
    {

    //	MapStatusUpdate update=MapStatusUpdateFactory.zoomTo(21);
    //	bdMap.setMapStatus(update);
    	
    	bdMap.setMyLocationEnabled(true);//开启定位图层
    	mLocationClient = new LocationClient(getApplicationContext());     //声明LocationClient类
        mLocationClient.registerLocationListener(mLocationClientListener);    
        mLocationClient.start();

       
    }
    private BDLocationListener mLocationClientListener =new BDLocationListener() {


		@Override
		public void onReceiveLocation(BDLocation arg0) {
			// TODO Auto-generated method stub
			if(arg0==null)
				return;
			
			float  accuracy= arg0.getRadius();
			double  lat=  arg0.getLatitude();
			double  lon= arg0.getLongitude();
    		
    		 MyLocationData.Builder build=new  MyLocationData.Builder();
    			build.accuracy(accuracy);
    			build.latitude(lat);
    			build.longitude(lon);
    			MyLocationData myLocationData=build.build();
    			bdMap.setMyLocationData(myLocationData);//设置定位数据
    		
			if (firstLoc) {
				firstLoc = false;

				MapStatus.Builder mapStatusBuilder = new MapStatus.Builder();
				LatLng ll = new LatLng(lat, lon);
				mapStatusBuilder.target(ll);
				//mapStatusBuilder.zoom(18.0f);

				MapStatus mapStatus = mapStatusBuilder.build();
				MapStatusUpdate mapUpdate = MapStatusUpdateFactory
						.newMapStatus(mapStatus);
				bdMap.animateMapStatus(mapUpdate);

			}
		}
    };
    
    
    
    protected void onDestroy() {  
        super.onDestroy();  
        //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理  
        locationClient.stop();
        bdMap.setMyLocationEnabled(false);
        mMapView.onDestroy();  
    }  
    @Override  
    protected void onResume() {  
        super.onResume();  
        //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理  
        mMapView.onResume();  
        }  
    @Override  
    protected void onPause() {  
        super.onPause();  
        //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理  
        mMapView.onPause();  
        }  

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
}
代码注释已经十分详细了,相信大家也看的懂,关于每个API的详细功能请参考百度地图API官网相关信息。

看一下运行结果,不知道为何在模拟器上运行定位结果不太准确,但是可以看到定位功能已经显示出来了(第一张图),在自己手机上定位还是非常准的(第二张图)截图如下:



希望本博客可以帮到需要在自己的项目中使用百度地图定位功能的小伙伴们,当然本博客只给出了最核心的代码,之所以给出最核心的代码是因为最核心的东西往往能最简洁的说明使用百度地图的逻辑过程,其余的一下显示方面的细节代码大家可以参考官方Demo的代码。


如果读者觉得本博客写的不错,记得小手一抖,点个赞哦!另外欢迎大家关注我的博客账号哦,将会不定期的为大家分享技术干货,福利多多哦!

posted on 2016-07-01 21:47  海南一哥  阅读(387)  评论(0编辑  收藏  举报

导航