android-百度地图

在开发android项目中,肯定会有地图需求,比如说定位之类,现在有很多第三方地图api可以供我们使用,比如百度、高德,今天我们主要学习百度地图

首先要使用百度地图得先到百度地图api的控制台去申请一个应用:http://lbsyun.baidu.com/apiconsole/key

然后创建一个android应用,这里需要我们填写应用名称和安全码,安全码由我们的编译器的SHA1+;+应用包名,比如我的39:EF:27:35:92:E6:FF:9A:16:22:16:74:DB:B9:EA:28:E3:17:E4:A0;com.baidumapdemo

创建成功后我们就拥有属于应用的ak了

接着我们去下载百度地图的sdk,在下载的时候选择你需要的功能下载,也可以全部下载

然后集成到我们的项目的libs中去,再去manifest中去配置相关参数

权限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
开发密钥,填写我们刚才申请的ak

        <meta-data  
        android:name="com.baidu.lbsapi.API_KEY"  
        android:value="ly5VHFSGer0gbMrEG4rtK2zg" />  
定位服务

        <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中加一个mapview控件

    <com.baidu.mapapi.map.MapView  
    android:id="@+id/bmapView"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    android:clickable="true" />

接着就开始编写我们的代码

在应用开始之前初始化sdk

//在使用SDK各组件之前初始化context信息,传入ApplicationContext  
        //注意该方法要再setContentView方法之前实现  
        SDKInitializer.initialize(getApplicationContext());  
        setContentView(R.layout.activity_main);  
实例化mapview,实现生命周期的方法

public class MainActivity extends Activity {
	
	private MapView mapView;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		//在使用SDK各组件之前初始化context信息,传入ApplicationContext  
        //注意该方法要再setContentView方法之前实现  
        SDKInitializer.initialize(getApplicationContext());  
		setContentView(R.layout.activity_main);
		mapView = (MapView) findViewById(R.id.bmapView);
	}
	
	@Override
	protected void onResume() {
		super.onResume();
		mapView.onResume();
	}
	
	@Override
	protected void onPause() {
		super.onPause();
		mapView.onPause();
	}
	
	@Override
	protected void onDestroy() {
		super.onDestroy();
		mapView.onDestroy();
	}

运行图



可以看到我们的地图已经成功的运行了,不过当前地图并不是我们当前的位置,所有我们就来实现它的定位功能

实现定位功能主要使用sdk的BaiduMap,LocationClient,BDLocationListener、LocationClientOption这个四个类

通过BaiduMap得到mapview

baiduMap = mapView.getMap();

实例化LocationClient

locationClient = new LocationClient(this);

定位监听

	private class myBaidu implements BDLocationListener{

		@Override
		public void onReceiveLocation(BDLocation arg0) {
			// TODO Auto-generated method stub
			
		}
		
		
	}
给locationClinet注册定位监听

locationClient.registerLocationListener(new myBaidu());

定位需要的设置LocationClientOption

		options = new LocationClientOption();
		options.setCoorType("bd09ll");//获取经纬度方式
		options.setIsNeedAddress(true);//获取定位地址
		options.setOpenGps(true);//打开gps
		options.setScanSpan(1000);//刷新位置周期
		locationClient.setLocOption(options);

在定位监听方法中实现定位

	private class myBaidu implements BDLocationListener{

		@Override
		public void onReceiveLocation(BDLocation location) {
			MyLocationData data = new MyLocationData.Builder()//
					.accuracy(location.getRadius())//
					.latitude(location.getLatitude())//经度
					.longitude(location.getLongitude())//纬度
					.build();
			baiduMap.setMyLocationData(data);//设置到map
			
			LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());//设置定位到经纬度到latlng
			MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);//根据经纬度刷新map
			baiduMap.animateMapStatus(msu);//动画过度
			
			
		}
		
		
	}

开启定位,关闭定位

	@Override
	protected void onStart() {
		super.onStart();
		baiduMap.setMyLocationEnabled(true);//允许定位
		locationClient.start();
	}
	
	@Override
	protected void onStop() {
		// TODO Auto-generated method stub
		super.onStop();
		baiduMap.setMyLocationEnabled(false);
		locationClient.stop();
	}

运行图


定位功能我们就实现了

这里我们可以更换掉定位之后的图标

这里使用

BitmapDescriptor,MyLocationConfiguration来实现

先得到需要更换的图

bitmap = BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher);

然后更换

			MyLocationConfiguration configuration = new MyLocationConfiguration(LocationMode.NORMAL, true, bitmap);
			baiduMap.setMyLocationConfigeration(configuration);

运行图



我们同样也可以在地图上根据不同的坐标添加一些覆盖物,类似在地图上搜索加油站显示的图标一样

		double[][] ll = {{30.67,104.16},{30.67,104.06},{30.67,104.26}};
		
		baiduMap.clear();
		Marker marker = null;
		LatLng latLng = null;
		OverlayOptions overlayOptions;
		
		for (int i = 0; i < ll.length; i++) {
			latLng = new LatLng(ll[i][0], ll[i][1]);//定义Maker坐标点  
			//构建MarkerOption,用于在地图上添加Marker  
			overlayOptions = new MarkerOptions()
					.position(latLng)//设置marker的位置
					.icon(bitmap)//设置marker图标
					.zIndex(5);//设置marker所在层级
			marker = (Marker) baiduMap.addOverlay(overlayOptions);//将marker添加到地图上
		}
		
		MapStatusUpdate m = MapStatusUpdateFactory.newLatLng(latLng);
		baiduMap.animateMapStatus(m);


运行图


百度地图的开发其实很好做,官方的demo和api文档已经写得很明白了,只要花点时间,就能明白

项目代码:点击打开链接




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值