百度安卓地图学习(一)

看完本文后,喜欢安卓的亲们可以接着看看http://blog.csdn.net/woshishuoshuoa/article/details/9858417

谷歌地图开放性很好,可惜,可以值得参考的资料太少,而且谷歌改版后,对手机的版本要求也变了,部分接口对手机版本要求偏高,更值得一提的是部分接口居然还会抽风。。。不过,谷歌地图的确做的很大耶很好,所以在简单地学习了谷歌之后再来学习百度地图的话,就会觉得很容易了,百度地图很多东西就是从谷歌那学来的,不过由于开发性低,百度地图很多东西都是做死了的,不允许其他人修改的,下面就简单地聊一聊百度地图吧~~~

学习百度地图时,多看看百度地图api官网http://developer.baidu.com/上面教你怎样申请api key,怎样获取世界地图,怎样定位等等,说的都很详细的,这里小菜鸟就不多说什么了,不过官网给的东西有些还需要自己动点脑筋整合一下,这样吧,小菜鸟就贴出点代码给大家看看吧,都是很简单的列子哦~~~

http://developer.baidu.com/map/sdkandev-2.htm详细地讲解了如何获取一个世界地图~~~

获取了世界地图之后如何定位到自己当前的位置呢,只需在获取世界地图的基础上修改MainActivity中的代码如下即可:

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.map.LocationData;
import com.baidu.mapapi.map.MapController;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationOverlay;
import com.baidu.platform.comapi.basestruct.GeoPoint;
import android.os.Bundle;
import android.util.Log;
import android.app.Activity;

public class MainActivity extends Activity {
	BMapManager mBMapMan = null;  
	MapView mMapView = null;
	
	public LocationClient mLocationClient=null;
	public BDLocationListener myListener=new MyLocationListener();

	@Override
	protected void onCreate(Bundle savedInstanceState) {
//======================================================初始化地图Activity、使用Key========================================
		super.onCreate(savedInstanceState);  
		mBMapMan=new BMapManager(getApplication());  
		mBMapMan.init("4b605b48b3062e4687d0ada2ecd65a8e", null);    
		//注意:请在试用setContentView前初始化BMapManager对象,否则会报错  
		setContentView(R.layout.activity_main);  
		mMapView=(MapView)findViewById(R.id.bmapsView);  
		mMapView.setBuiltInZoomControls(true);  
		//设置启用内置的缩放控件  
		MapController mMapController=mMapView.getController();  
		// 得到mMapView的控制权,可以用它控制和驱动平移和缩放  
		GeoPoint point =new GeoPoint((int)(39.915* 1E6),(int)(116.404* 1E6));  
		//用给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6)  
		mMapController.setCenter(point);//设置地图中心点  
		mMapController.setZoom(12);//设置地图zoom级别  
//===========================================================初始化地图完成================================================	

		mLocationClient=new LocationClient(getApplicationContext()); //声明LocationClient类
		mLocationClient.registerLocationListener(myListener);//注册监听函数
		
		LocationClientOption option=new LocationClientOption();
		option.setOpenGps(true);
		option.setAddrType("all");//返回的定位结果包含地址信息
		option.setCoorType("bd0911");//返回的定位结果是百度经纬度,默认值gcj02
		option.setScanSpan(2000);
		option.disableCache(true);//禁止启用缓存定位
		option.setPoiDistance(1000);//poi查询距离
		option.setPoiExtraInfo(true);//是否需要POI的电话和地址等详细信息
		mLocationClient.setLocOption(option);
		mLocationClient.start();//启动LocationClient!!!
		mMapView.getController().setZoom(15);
		if (mLocationClient!=null&&mLocationClient.isStarted()) {
			mLocationClient.requestLocation();
		}
		else {
			Log.d("LocSDK3", "location is null or not started");
			if (mLocationClient!=null&&mLocationClient.isStarted()) {
				mLocationClient.requestPoi();
			}
		}

	}
	class MyLocationListener implements BDLocationListener{

		@Override
		public void onReceiveLocation(BDLocation location) {
			// TODO Auto-generated method stub
			GeoPoint geoPoint=new GeoPoint((int)(location.getLatitude()*1E6),(int)(location.getLongitude()*1E6));
			/* MyLocationOverlay只负责显示我的位置,
			 * 将获取的位置数据放在一个LocationData结构中并用该结构设置MyLcationOverlay的数据源,
			 * 即可创建MyLocationOverlay*/
			MyLocationOverlay myLocationOverlay=new MyLocationOverlay(mMapView);
			LocationData locationData=new LocationData();
			locationData.latitude=location.getLatitude();
			locationData.longitude=location.getLongitude();
			locationData.direction=2.0f;
			myLocationOverlay.setData(locationData);
			mMapView.getOverlays().clear();
			mMapView.getOverlays().add(myLocationOverlay);
			mMapView.refresh();//在更新地图覆盖物后,需调用MapView.refresh() 使更新生效
			mMapView.getController().animateTo(geoPoint);
		}

		@Override
		public void onReceivePoi(BDLocation arg0) {
			// TODO Auto-generated method stub
			
		}
		
	}
//===================================================重写以下方法,管理API============================================
	@Override  
	protected void onDestroy(){  
	        mMapView.destroy();  
	        if(mBMapMan!=null){  
	                mBMapMan.destroy();  
	                mBMapMan=null;  
	        }  
	        super.onDestroy();  
	}  
	@Override  
	protected void onPause(){  
	        mMapView.onPause();  
	        if(mBMapMan!=null){  
	               mBMapMan.stop();  
	        }  
	        super.onPause();  
	}  
	@Override  
	protected void onResume(){  
	        mMapView.onResume();  
	        if(mBMapMan!=null){  
	                mBMapMan.start();  
	        }  
	       super.onResume();  
	}  
}

注意点:不要忘记在Mainfest中添加service

<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"></service>

效果图:


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值