Android地图定位-百度地图上定位自己所在的位置

一 效果图


二 主要代码


BaseActivity.java

package com.itheima.baidumap74;

import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.UiSettings;
import com.baidu.mapapi.model.LatLng;
import com.itheima.baidumap74.util.Utils;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.widget.Toast;

public abstract class BaseActivity extends Activity {
	
	private static final String TAG = "BaseActivity";
	
	/** 黑马坐标(北京市海淀区东北旺南路45号)*/
	protected LatLng hmPos = new LatLng(40.050513, 116.30361);
	/** 传智坐标 */
	protected LatLng czPos = new LatLng(40.065817,116.349902);
	/** 天安门坐标 */
	protected LatLng tamPos = new LatLng(39.915112,116.403963);


	protected MapView mapView;
	protected BaiduMap baiduMap;

	// 这里加final是为了不让子类覆盖,原因是为了预防这里的一些类还没初始化的时候就被子类调用
	@Override
	protected final void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//获取地图控件引用  
        mapView = (MapView) findViewById(R.id.bmapView); 
        
        baiduMap = mapView.getMap();	// 获取地图控制器
        
        // 1.	隐藏缩放按钮、比例尺
        // mapView.showScaleControl(false);	// 隐藏比例按钮,默认是显示的
        // mapView.showZoomControls(false);	// 隐藏缩放按钮,默认是显示的
        
        // 2.	获取获取最小(3)、最大缩放级别(20)
        float maxZoomLevel = baiduMap.getMaxZoomLevel(); // 获取地图最大缩放级别
        float minZoomLevel = baiduMap.getMinZoomLevel(); // 获取地图最小缩放级别
        Log.i(TAG, "minZoomLevel = " + minZoomLevel + ", maxZoomLevel" + maxZoomLevel);
        
		// 3.	设置地图中心点为黑马
        MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.newLatLng(hmPos);
        baiduMap.setMapStatus(mapStatusUpdate);
        
        // 4.	设置地图缩放为15
        mapStatusUpdate = MapStatusUpdateFactory.zoomTo(15);
        baiduMap.setMapStatus(mapStatusUpdate);
        
        // 6.	获取地图Ui控制器:隐藏指南针
        // UiSettings uiSettings = baiduMap.getUiSettings();
        // uiSettings.setCompassEnabled(false);	//  不显示指南针
        
        init();
	}
	
	/** 这个方法让子类实现 */
	public abstract void init();
	
	/**
	 * 在屏幕中央显示一个Toast
	 * @param text
	 */
	public void showToast(CharSequence text) {
		Utils.showToast(this, text);
	}
	
	@Override  
	protected void onDestroy() {  
		super.onDestroy();  
		//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理  
		mapView.onDestroy();  
	} 
	
	@Override  
	protected void onResume() {  
		super.onResume();  
		//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理  
		mapView.onResume();  
	}  
	
	@Override  
	protected void onPause() {  
		super.onPause();  
		//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理  
		mapView.onPause();  
	}  
}
CircelOverlayActivity.java

package com.itheima.baidumap74;

import com.baidu.mapapi.map.CircleOptions;
import com.baidu.mapapi.map.Stroke;

public class CircelOverlayActivity extends BaseActivity {

	@Override
	public void init() {
		CircleOptions options = new CircleOptions();	// 创建一个圆形覆盖物的参数
		options.center(hmPos)	// 圆心
				.radius(1000)	// 半径
				.stroke(new Stroke(20, 0x55FF0000))// 线条宽度、颜色
				.fillColor(0x5500FF00);	// 圆的填充颜色
		baiduMap.addOverlay(options);	// 添加一个覆盖物
	}

}
DemoListActivity.java

package com.itheima.baidumap74;

import com.baidu.mapapi.SDKInitializer;
import com.itheima.baidumap74.util.Utils;

import android.app.ListActivity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class DemoListActivity extends ListActivity {

	private BroadcastReceiver receiver;
	private ClassAndName[] datas = {
			new ClassAndName(HelloBaiduMapActivity.class, "HelloBaiduMap"),
			new ClassAndName(MapLayerActivity.class, "地图图层"),
			new ClassAndName(CircelOverlayActivity.class, "圆形覆盖物"),
			new ClassAndName(TextOverlayActivity.class, "文字覆盖物"),
			new ClassAndName(MarkerOverlayActivity.class, "标志覆盖物"),
			new ClassAndName(SearchInBoundActivity.class, "在范围内搜索"),
			new ClassAndName(SearchInCityActivity.class, "在城市内搜索"),
			new ClassAndName(SearchInNearbyActivity.class, "在周边内搜索"),
			new ClassAndName(DrivingSearchActivity.class, "驾车路线搜索"),
			new ClassAndName(TransitSearchActivity.class, "换乘路线搜索"),
			new ClassAndName(WalkingSearchActivity.class, "步行路线搜索"),
			new ClassAndName(LocationActivity.class, "定位"),
	};
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		registerSDKCheckReceiver();
		ArrayAdapter<ClassAndName> adapter = 
				new ArrayAdapter<DemoListActivity.ClassAndName>(this, android.R.layout.simple_list_item_1, datas);
		setListAdapter(adapter);
	}
	
	@Override
	protected void onListItemClick(ListView l, View v, int position, long id) {
		// 取出单击位置的ClassAndName
		ClassAndName classAndName = (ClassAndName) l.getItemAtPosition(position);
		startActivity(new Intent(this, classAndName.clazz));
	}
	
	
	class ClassAndName {
		/** 用于保存Activity的字节码 */
		public Class<?> clazz;
		/** 用于保存Activity对应的名字 */
		public String name;
		public ClassAndName(Class<?> cls, String name) {
			this.clazz = cls;
			this.name = name;
		}
		@Override
		public String toString() {
			return name;
		}
	}
	
	private void registerSDKCheckReceiver() {
		receiver = new BroadcastReceiver() {
			
			@Override
			public void onReceive(Context context, Intent intent) {
				String action = intent.getAction();
				if (SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR.equals(action)) {
					Utils.showToast(DemoListActivity.this, "网络错误");
				} else if (SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR.equals(action)) {
					Utils.showToast(DemoListActivity.this, "key验证失败");
				}
			}
		};
		IntentFilter filter = new IntentFilter();
		// 监听网络错误
		filter.addAction(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR);
		// 监听百度地图sdk 的key是否正确
		filter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR);
		registerReceiver(receiver, filter);
	}
	
	@Override
	protected void onDestroy() {
		unregisterReceiver(receiver);
		super.onDestroy();
	}
}
DrivingSearchActivity.java
package com.itheima.baidumap74;

import java.util.ArrayList;
import java.util.List;

import com.baidu.mapapi.overlayutil.DrivingRouteOverlay;
import com.baidu.mapapi.search.route.DrivingRouteLine;
import com.baidu.mapapi.search.route.DrivingRoutePlanOption;
import com.baidu.mapapi.search.route.DrivingRouteResult;
import com.baidu.mapapi
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值