地图测试

运行效果:

地图测试_第1张图片 地图测试_第2张图片 地图测试_第3张图片




1.申请百度API Key;

2.MAIN ACTIVITY

package com.example.baidumaptest;

import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.Toast;

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.mapapi.map.PopupClickListener;
import com.baidu.mapapi.map.PopupOverlay;
import com.baidu.platform.comapi.basestruct.GeoPoint;

public class MainActivity extends Activity {

	private BMapManager manager;
	private MapView mapView;
	private LocationManager locationManager;
	private String provider;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		manager = new BMapManager(this);
		manager.init("TIWXDehxHpLGeadYYU8zNMK3tUC99shs", null);
		setContentView(R.layout.activity_main);
		mapView = (MapView) findViewById(R.id.map_view);
		mapView.setBuiltInZoomControls(true);
		locationManager = (LocationManager) getSystemService(Context. LOCATION_SERVICE);
		// 获取所有可用的位置提供器
		List providerList = locationManager.getProviders(true);
		if (providerList.contains(LocationManager.GPS_PROVIDER)) {
			provider = LocationManager.GPS_PROVIDER;
		} else if (providerList.contains(LocationManager.NETWORK_PROVIDER)) {
			provider = LocationManager.NETWORK_PROVIDER;
		} else {
			// 当没有可用的位置提供器时,弹出Toast提示用户
			Toast.makeText(this, "No location provider to use", Toast.LENGTH_SHORT).show();
			return;
		}
		Location location = locationManager.getLastKnownLocation(provider);
		if (location != null) {
			navigateTo(location);
		}
	}
	private void navigateTo(Location location) {
		MapController controller = mapView.getController();
		controller.setZoom(16); // 设置缩放级别
		GeoPoint point = new GeoPoint((int) (location.getLatitude() * 1E6),
							(int) (location.getLongitude() * 1E6));
		controller.setCenter(point); // 设置地图中心点
		MyLocationOverlay myLocationOverlay = new MyLocationOverlay(mapView);
		LocationData locationData = new LocationData();
		// 指定我的位置
		locationData.latitude = location.getLatitude();
		locationData.longitude = location.getLongitude();
		myLocationOverlay.setData(locationData);
		mapView.getOverlays().add(myLocationOverlay);
		mapView.refresh(); // 刷新使新增覆盖物生效
		PopupOverlay pop = new PopupOverlay(mapView, new PopupClickListener() {
			@Override
			public void onClickedPopup(int index) {
				// 相应图片的点击事件
				Toast.makeText(MainActivity.this,
						"You clicked button " + index, Toast.LENGTH_SHORT). show();
			}
		});
		// 创建一个长度为3的Bitmap数组
		Bitmap[] bitmaps = new Bitmap[3];
		try {
			// 将三张图片读取到内存中
			bitmaps[0] = BitmapFactory.decodeResource(getResources(), R.drawable.left);
			bitmaps[1] = BitmapFactory.decodeResource(getResources(), R.drawable.middle);
			bitmaps[2] = BitmapFactory.decodeResource(getResources(), R.drawable.right);
		} catch (Exception e) {
			e.printStackTrace();
		}
		pop.showPopup(bitmaps, point, 18);
	}

	@Override
	protected void onResume() {
		mapView.onResume();
		if (manager != null) {
			manager.start();
		}
		super.onResume();
	}

	@Override
	protected void onPause() {
		mapView.onPause();
		if (manager != null) {
			manager.stop();
		}
		super.onPause();
	}
	
	@Override
	protected void onDestroy() {
		mapView.destroy();
		if (manager != null) {
			manager.destroy();
			manager = null;
		}
		super.onDestroy();
	}
	
}

/BaiduMapTest/res/layout/activity_main.xml



    



添加用户权限

/BaiduMapTest/AndroidManifest.xml

 
    
    
    
    
    
    
    
    
    
    
    
    

 

类与方法的介绍

 1. 首先创建一个BMapManager对象,然后调用它的init()方法来进行初始化操作。init()方法接收两个参数,第一个参数就是申请到的API Key,第二个参数传入null即可。初始化操作一定要在setContentView()方法前调用,不然的话就会出错。接下来获取到MapView的实例,然后调用它的setBuiltInZoomControls()方法并传入true,表示启用内置的缩放控制功能。

   2. 百度地图的API中提供了一个MapController类,它是地图的总控制器,调用MapViewgetController()方法就能获取到MapController的实例,如下所示:
MapController controller = mapView.getController();
有了MapController后,我们就能对地图进行各种各样的操作了,比如设置地图的缩放级别就可以这样写:
controller.setZoom(12);
其中12就表示一个缩放级别,其取值范围是319,级别越高,地图显示的信息就越精细。
3.GeoPoint类能实现定位到某一个经纬度上,它的构造方法接收两个参数,第一个参数是纬度值,第二参数是经度值。但是需要注意,GeoPoint是以微度为单位的,因此我们还要把经纬度的值乘以106次方再传给GeoPoint。之后调用MapController的setCenter()方法,并把GeoPoint的实例传入就可以了,写法如下:
GeoPoint point = new GeoPoint((int) (39.915 * 1E6), (int) (116.404 * 1E6));   
mMapController.setCenter(point);
上述代码就实现了将地图定位到北纬39.915度、东经116.404度这个位置的功能。
4.在百度地图所有的覆盖物中,最常用的就是MyLocationOverlay了,它主要的作用是可以在地图中添加一个图层,以标注出设备当前的位置。首先是创建了一个MyLocationOverlay的实例,然后通过LocationData对象指定了当前的经纬度数据,并调用setData()方法将LocationData存放到了MyLocationOverlay中。之后通过MapViewgetOverlays()方法可以得到一个用于管理覆盖物的集合,再调用add()方法将MyLocationOverlay这个覆盖物添加到集合中。最后,还需要调用一下MapViewrefresh()方法使新增的覆盖物生效。
5.相比于MyLocationOverlay,PopupOverlay允许我们自己指定覆盖物上显示的图片,并且还可以响应图片的点击事件,每个PopupOverlay上最多可以显示三张图片。先同样是需要创建一个PopupOverlay的实例,注意在构造方法的参数里面可以传入一个PopupClickListener的实现,它是用于处理图片的点击事件的,接下来创建了一个长度为3Bitmap数组,然后调用BitmapFactory的decodeResource()方法来加三张图片,并把它们存放到Bitmap数组当中。最后调用PopupOverlay的showPopup()方法将这个覆盖物显示出来,showPopup()方法接收三个参数,第一个参数就是前面创建的Bitmap数组,第二个参数是一个用于指定地理位置的GeoPoint对象,第三个参数是覆盖物在垂直方法上的偏移距离。





你可能感兴趣的:(Android)