易网时代-编程资源站
Welcome
微信登录
编程资源
图片资源库
蚂蚁家优选
PDF转换器
首页
/
操作系统
/
Linux
/
百度地图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);
}
}
}
收藏该网址
版权所有©石家庄振强科技有限公司2024
冀ICP备08103738号-5
网站地图