package com.android.ddj.fzbmzxc.activity; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import com.android.ddj.fzbmzxc.Location; import com.android.ddj.fzbmzxc.R; 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; /** * @author dingdj Date:2013-11-11下午5:25:10 * */ public class LocationOverlayDemo extends Activity { private static final String TAG = "LocationOverlayDemo"; private MapView mMapView = null; /** * 用MapController完成地图控制 */ private MapController mMapController = null; private MyLocationOverlay myLocationOverlay; private MyLocationOverlay targetOverlay; private double[] targetLocation; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /** * 使用地图sdk前需先初始化BMapManager. BMapManager是全局的,可为多个MapView共用,它需要地图模块创建前创建, * 并在地图地图模块销毁后销毁,只要还有地图模块在使用,BMapManager就不应该销毁 */ Location app = (Location) this.getApplication(); if (app.mBMapMan == null) { app.mBMapMan = new BMapManager(this); /** * 如果BMapManager没有初始化则初始化BMapManager */ app.mBMapMan.init(Location.BAIDU_MAP_KEY, new Location.MyGeneralListener()); } /** * 由于MapView在setContentView()中初始化,所以它需要在BMapManager初始化之后 */ setContentView(R.layout.activity_locationoverlay); mMapView = (MapView) findViewById(R.id.bmapView); mMapView.setBuiltInZoomControls(true); /** * 获取地图控制器 */ mMapController = mMapView.getController(); /** * 设置地图是否响应点击事件 . */ mMapController.enableClick(true); /** * 设置地图缩放级别 */ mMapController.setZoom(16); /** * 将地图移动至指定点 * 使用百度经纬度坐标,可以通过http://api.map.baidu.com/lbsapi/getpoint/index * .html查询地理坐标 如果需要在百度地图上显示使用其他坐标系统的位置,请发邮件至mapapi@baidu.com申请坐标转换接口 */ /* * GeoPoint p = new GeoPoint((int)(app.curLatLng[0] * 1E6), * (int)(app.curLatLng[1] * 1E6)); mMapController.setCenter(p); */ myLocationOverlay = new MyLocationOverlay(mMapView); mMapView.getOverlays().add(myLocationOverlay); targetOverlay = new MyLocationOverlay(mMapView); targetOverlay.setMarker(getResources().getDrawable(R.drawable.icon_geo)); mMapView.getOverlays().add(targetOverlay); if (getIntent()!=null && getIntent().hasExtra("targetLocation")) { // 当用intent参数时,设置中心点为指定点 Bundle b = getIntent().getExtras(); targetLocation = b.getDoubleArray("targetLocation"); } } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); if (intent.hasExtra("targetLocation")) { // 当用intent参数时,设置中心点为指定点 Bundle b = intent.getExtras(); targetLocation = b.getDoubleArray("targetLocation"); } } @Override protected void onPause() { /** * MapView的生命周期与Activity同步,当activity挂起时需调用MapView.onPause() */ mMapView.onPause(); super.onPause(); } @Override protected void onResume() { /** * MapView的生命周期与Activity同步,当activity恢复时需调用MapView.onResume() */ mMapView.onResume(); super.onResume(); LocationData locData = new LocationData(); locData.latitude = ((Location) this.getApplication()).curLatLng[0]; locData.longitude = ((Location) this.getApplication()).curLatLng[1]; locData.direction = 2.0f; myLocationOverlay.setData(locData); mMapView.refresh(); mMapView.getController().animateTo( new GeoPoint((int) (locData.latitude * 1e6), (int) (locData.longitude * 1e6))); if(targetLocation != null){ locData = new LocationData(); locData.latitude = targetLocation[0]; Log.v(TAG, targetLocation[0]+""); locData.longitude = targetLocation[1]; locData.direction = 2.0f; targetOverlay.setData(locData); mMapView.refresh(); } } @Override protected void onDestroy() { /** * MapView的生命周期与Activity同步,当activity销毁时需调用MapView.destroy() */ mMapView.destroy(); super.onDestroy(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mMapView.onSaveInstanceState(outState); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); mMapView.onRestoreInstanceState(savedInstanceState); } }