百度地图API之MyLocationOverlay的使用(Android)
百度地图API之MyLocationOverlay的使用(Android)
本篇文章主要讲解Baidu Map API中MyLocationOverlay的使用。故名思义,MyLocation中文释义为“我的位置”,而Overlay则是“图层”或“覆盖物”的意思,MyLocationOverlay的作用正是用于在地图上标注自己所处的位置。它跟使用ItemizedOverlay非常相似,只不过MyLocationOverlay标记的只有一个点。在地图上标记用户当前所处位置其实是一个GPS定位应用。首先通过GPS定位获取到用户当前所在位置的经纬度,再将该经纬度所代表的点在地图上标出来。其实除了在地图上标注自己所处的位置外,我们通常还有这样的需求:“如果我的位置发生改变,要能够实时在地图上体现出来”。
下面我们就来一步步实现上面想要的功能,主要是通过MyLocationOverlay结合LocationListener来实现的。
1)创建布局文件res/layout/main.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:Android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <com.baidu.mapapi.MapView android:id="@+id/map_View"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:clickable="true"
- />
- </LinearLayout>
2)创建Activity继承com.baidu.mapapi.MapActivity
- package com.liufeng.baidumap;
- import android.location.Location;
- import android.os.Bundle;
- import com.baidu.mapapi.BMapManager;
- import com.baidu.mapapi.GeoPoint;
- import com.baidu.mapapi.LocationListener;
- import com.baidu.mapapi.MKLocationManager;
- import com.baidu.mapapi.MapActivity;
- import com.baidu.mapapi.MapController;
- import com.baidu.mapapi.MapView;
- import com.baidu.mapapi.MyLocationOverlay;
- /**
- * 创建Activity(继承com.baidu.mapapi.MapActivity)
- *
- * @author liufeng
- * @date 2011-05-02
- */
- public class MyLocationActivity extends MapActivity implements LocationListener {
- private BMapManager mapManager;
- private MKLocationManager mLocationManager = null;
- private MyLocationOverlay myLocationOverlay;
- private MapView mapView;
- private MapController mapController;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- // 初始化MapActivity
- mapManager = new BMapManager(getApplication());
- // init方法的第一个参数需填入申请的API Key
- mapManager.init("285B415EBAB2A92293E85502150ADA7F03C777C4", null);
- super.initMapActivity(mapManager);
- mLocationManager = mapManager.getLocationManager();
- // 注册位置更新事件
- mLocationManager.requestLocationUpdates(this);
- // 使用GPS定位
- mLocationManager.enableProvider((int) MKLocationManager.MK_GPS_PROVIDER);
- mapView = (MapView) findViewById(R.id.map_View);
- // 设置地图模式为交通地图
- mapView.setTraffic(true);
- // 设置启用内置的缩放控件
- mapView.setBuiltInZoomControls(true);
- // 构造一个经纬度点
- GeoPoint point = new GeoPoint((int) (26.597239 * 1E6), (int) (106.720397 * 1E6));
- // 取得地图控制器对象,用于控制MapView
- mapController = mapView.getController();
- // 设置地图的中心
- mapController.setCenter(point);
- // 设置地图默认的缩放级别
- mapController.setZoom(7);
- // 添加定位图层
- myLocationOverlay = new MyLocationOverlay(this, mapView);
- // 注册GPS位置更新的事件,让地图能实时显示当前位置
- myLocationOverlay.enableMyLocation();
- // 开启磁场感应传感器
- myLocationOverlay.enableCompass();
- mapView.getOverlays().add(myLocationOverlay);
- }
- @Override
- protected boolean isRouteDisplayed() {
- return false;
- }
- @Override
- protected void onDestroy() {
- if (mapManager != null) {
- mapManager.destroy();
- mapManager = null;
- }
- mLocationManager = null;
- super.onDestroy();
- }
- @Override
- protected void onPause() {
- if (mapManager != null) {
- mapManager.stop();
- }
- super.onPause();
- }
- @Override
- protected void onResume() {
- if (mapManager != null) {
- mapManager.start();
- }
- super.onResume();
- }
- /**
- * 根据MyLocationOverlay配置的属性确定是否在地图上显示当前位置
- */
- @Override
- protected boolean isLocationDisplayed() {
- return myLocationOverlay.isMyLocationEnabled();
- }
- /**
- * 当位置发生变化时触发此方法
- *
- * @param location 当前位置
- */
- @Override
- public void onLocationChanged(Location location) {
- if (location != null) {
- // 将当前位置转换成地理坐标点
- final GeoPoint pt = new GeoPoint((int) (location.getLatitude() * 1000000), (int) (location.getLongitude() * 1000000));
- // 将当前位置设置为地图的中心
- mapController.setCenter(pt);
- }
- }
- }
|
评论暂时关闭