当前位置: 首页 > news >正文

百度地图使用案例代码

项目结构如下:


具体代码如下:


package com.xuliugen.baidumap;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;

import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.map.MKEvent;
import com.baidu.mapapi.map.MapController;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.search.MKAddrInfo;
import com.baidu.mapapi.search.MKBusLineResult;
import com.baidu.mapapi.search.MKDrivingRouteResult;
import com.baidu.mapapi.search.MKPoiResult;
import com.baidu.mapapi.search.MKSearchListener;
import com.baidu.mapapi.search.MKShareUrlResult;
import com.baidu.mapapi.search.MKSuggestionResult;
import com.baidu.mapapi.search.MKTransitRouteResult;
import com.baidu.mapapi.search.MKWalkingRouteResult;
import com.baidu.platform.comapi.basestruct.GeoPoint;

public class BaseActivity extends Activity {

	protected BMapManager manager; // 地图引擎管理工具
	protected MapView mapView; // 地图的展示时控件
	protected MapController mapController; // 控制地图的平移、缩放、旋转(MapView和MapController)

	protected int latitude = (int) (40.051 * 1E6);
	protected int longitude = (int) (116.303 * 1E6);
	protected GeoPoint hmGeoPoint = new GeoPoint(latitude, longitude);

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		checkKey();
		setContentView(R.layout.activity_main);
		init();

	}

	private void init() {
		mapView = (MapView) this.findViewById(R.id.ii_mapview);

		mapView.setBuiltInZoomControls(true); // 添加放大缩小按钮
		mapController = mapView.getController();

		mapController.setZoom(12);

	}

	private void checkKey() {
		manager = new BMapManager(getApplicationContext());

		manager.init(ConstantValue.KEY, new MKGeneralListener() {

			@Override
			public void onGetPermissionState(int isError) {
				if (isError == MKEvent.ERROR_PERMISSION_DENIED) {
					Toast.makeText(BaseActivity.this, "授权失败",
							Toast.LENGTH_SHORT).show();
				}
			}

			@Override
			public void onGetNetworkState(int isError) {
				if (isError == MKEvent.ERROR_NETWORK_CONNECT) {
					Toast.makeText(BaseActivity.this, "网络出错",
							Toast.LENGTH_SHORT).show();
				}
			}
		});
	}

	@Override
	protected void onResume() {
		mapView.onResume();
		super.onResume();
	}

	@Override
	protected void onPause() {
		mapView.onPause();
		super.onPause();
	}

	@Override
	protected void onDestroy() {
		mapView.destroy();
		super.onDestroy();
	}

	protected class MyMKSearchListenerAdapter implements MKSearchListener {

		@Override
		public void onGetAddrResult(MKAddrInfo result, int iError) {

		}

		@Override
		public void onGetBusDetailResult(MKBusLineResult result, int iError) {

		}

		@Override
		public void onGetDrivingRouteResult(MKDrivingRouteResult result,
				int iError) {

		}

		@Override
		public void onGetPoiDetailSearchResult(int result, int iError) {

		}

		@Override
		public void onGetPoiResult(MKPoiResult result, int type, int iError) {

		}

		@Override
		public void onGetShareUrlResult(MKShareUrlResult result, int iError,
				int arg2) {

		}

		@Override
		public void onGetSuggestionResult(MKSuggestionResult result, int iError) {

		}

		@Override
		public void onGetTransitRouteResult(MKTransitRouteResult result,
				int iError) {

		}

		@Override
		public void onGetWalkingRouteResult(MKWalkingRouteResult result,
				int iError) {

		}

	}

}


package com.xuliugen.baidumap;

public interface ConstantValue {

	String KEY = "w4fyK6fHcYx9VCjNpsXoVWsR";
}

package com.xuliugen.baidumap;

import android.os.Bundle;
import android.widget.Toast;

import com.baidu.mapapi.map.RouteOverlay;
import com.baidu.mapapi.search.MKDrivingRouteResult;
import com.baidu.mapapi.search.MKPlanNode;
import com.baidu.mapapi.search.MKRoute;
import com.baidu.mapapi.search.MKRoutePlan;
import com.baidu.mapapi.search.MKSearch;

public class DrivingSearchDemo extends BaseActivity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
	}

	@Override
	protected void onResume() {
		search();
		super.onResume();
	}

	private void search() {
		MKSearch mkSearch = new MKSearch();
		mkSearch.init(manager, new MyMKSearchListenerAdapter() {
			@Override
			public void onGetDrivingRouteResult(MKDrivingRouteResult result,
					int iError) {
				if (iError == 0) {
					if (result != null) {
						// 获得结果,绘制线的结果:包括驾车、步行
						RouteOverlay overlay = new RouteOverlay(
								DrivingSearchDemo.this, mapView);
						setData(overlay, result);
						mapView.getOverlays().add(overlay);
						mapView.refresh();
						super.onGetDrivingRouteResult(result, iError);
					}
				} else {
					Toast.makeText(DrivingSearchDemo.this, "未查询到结果",
							Toast.LENGTH_SHORT).show();
				}
			}

		});
		// 起点所在城市--搜索的起点--终点所在城市--搜索的终点 ;返回成功为0 否则为-1
		MKPlanNode startMkPlanNode = new MKPlanNode();
		startMkPlanNode.pt = hmGeoPoint; // 起点所在城市

		MKPlanNode endMkPlanNode = new MKPlanNode();
		endMkPlanNode.name = "天安门";
		
		//驾车策略
		mkSearch.setDrivingPolicy(MKSearch.ECAR_FEE_FIRST);
		mkSearch.drivingSearch("北京", startMkPlanNode, "北京", endMkPlanNode);

		/*
		 * 第二种方法 List<MKWpNode> nodes = new ArrayList<MKWpNode>(); MKWpNode node
		 * = new MKWpNode(); node.city = "北京"; node.name = "天安门";
		 * mkSearch.drivingSearch("北京", startMkPlanNode, "北京",
		 * endMkPlanNode,nodes );
		 */
	}

	private void setData(RouteOverlay overlay, MKDrivingRouteResult result) {
		if (result.getNumPlan() > 0) { // 判断返回的结果集中至少有一条数据
			MKRoutePlan plan = result.getPlan(0);
			MKRoute route = plan.getRoute(0);
			overlay.setData(route);
		}

	}
}

package com.xuliugen.baidumap;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.widget.Toast;

import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.map.Geometry;
import com.baidu.mapapi.map.Graphic;
import com.baidu.mapapi.map.GraphicsOverlay;
import com.baidu.mapapi.map.MKEvent;
import com.baidu.mapapi.map.MapController;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.Symbol;
import com.baidu.platform.comapi.basestruct.GeoPoint;

/*
 * 在地图上绘制几何图形元素
 */
public class GraphicsOverlayDemo extends Activity {

	private BMapManager manager; // 地图引擎管理工具
	private MapView mapView; // 地图的展示时控件
	private MapController mapController; // 控制地图的平移、缩放、旋转(MapView和MapController)

	int latitude = (int) (40.051 * 1E6);
	int longitude = (int) (116.303 * 1E6);
	private GeoPoint hmGeoPoint = new GeoPoint(latitude, longitude);

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		/*
		 * 验证key,只有成功才会有数据的显示
		 */
		checkKey();
		setContentView(R.layout.activity_graphics);
		init();

		/*
		 * 绘制一个圆
		 */
		draw();

	}

	private void draw() {
		// 1.定义覆盖物
		GraphicsOverlay overlay = new GraphicsOverlay(mapView);

		// 2.设置覆盖物的数据
		setData(overlay);

		// 3.获取mapView存放覆盖物的集合、添加覆盖物
		mapView.getOverlays().add(overlay);

		// 4.手动刷新界面
		mapView.refresh();
	}

	private void setData(GraphicsOverlay overlay) {
		/*
		 * 定义几何图形:圆心+半径
		 */
		Geometry geometry = new Geometry();
		/**
		 * public void setCircle(GeoPoint geoPoint,int radius) 设置图形为圆 参数:
		 * geoPoint - 地理坐标 radius - 圆的半径,单位:米
		 */
		geometry.setCircle(hmGeoPoint, 1000); // 画圆

		/*
		 * 定义几何图形的样式:颜色+线条的宽度
		 */
		Symbol symbol = new Symbol();
		/**
		 * setSurface
		 * 
		 * public void setSurface(Symbol.Color color,int status,int linewidth)
		 * 设置面样式 参数: color - 颜色 status - 填充状态,0表示不填充,1表示填充 linewidth -
		 * 线宽,当填充状态为填充时线宽无意义
		 */
		Symbol.Color color = symbol.new Color();
		color.red = 255;
		color.green = 0;
		color.blue = 0;
		color.alpha = 100;
		symbol.setSurface(color, 1, 0);
		/*
		 * 设置数据
		 */
		Graphic graphic = new Graphic(geometry, symbol);

		overlay.setData(graphic);

	}

	private void init() {
		mapView = (MapView) this.findViewById(R.id.ii_mapview2);

		mapView.setBuiltInZoomControls(true); // 添加放大缩小按钮

		// 获取MapController
		mapController = mapView.getController();
		mapController.setZoom(12);

	}

	private void checkKey() {
		manager = new BMapManager(getApplicationContext());

		manager.init(ConstantValue.KEY, new MKGeneralListener() {

			@Override
			public void onGetPermissionState(int isError) {
				if (isError == MKEvent.ERROR_PERMISSION_DENIED) {
					Toast.makeText(GraphicsOverlayDemo.this, "授权失败",
							Toast.LENGTH_SHORT).show();
				}
			}

			@Override
			public void onGetNetworkState(int isError) {
				if (isError == MKEvent.ERROR_NETWORK_CONNECT) {
					Toast.makeText(GraphicsOverlayDemo.this, "网络出错",
							Toast.LENGTH_SHORT).show();
				}
			}
		});
	}

	@Override
	protected void onResume() {
		mapView.onResume();
		super.onResume();
	}

	@Override
	protected void onPause() {
		mapView.onPause();
		super.onPause();
	}

	@Override
	protected void onDestroy() {
		mapView.destroy();
		super.onDestroy();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

package com.xuliugen.baidumap;

import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.map.MKEvent;
import com.baidu.mapapi.map.MapController;
import com.baidu.mapapi.map.MapView;
import com.baidu.platform.comapi.basestruct.GeoPoint;
import com.xuliugen.baidumap.R;

import android.os.Bundle;
import android.app.Activity;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

public class HelloBaiDuMap extends Activity {
	private BMapManager manager; // 地图引擎管理工具
	private MapView mapView; // 地图的展示时控件
	private MapController mapController; // 控制地图的平移、缩放、旋转(MapView和MapController)

	int latitude = (int) (40.051 * 1E6);
	int longitude = (int) (116.303 * 1E6);
	private GeoPoint hmGeoPoint = new GeoPoint(latitude, longitude);

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		/*
		 * 验证key,只有成功才会有数据的显示
		 */
		checkKey();
		setContentView(R.layout.activity_main);
		init();
	}

	private void init() {
		mapView = (MapView) this.findViewById(R.id.ii_mapview);

		/**
		 * public void setBuiltInZoomControls(boolean on) 设置是否启用内置的缩放控件。
		 * 如果启用,MapView将自动显示这些缩放控件。 参数: on -
		 * 内置的缩放控件是否启用。如果是false,用户处理缩放控件在界面上的显示。
		 */
		mapView.setBuiltInZoomControls(true); // 添加放大缩小按钮

		// 获取MapController
		mapController = mapView.getController();
		/**
		 * public float setZoom(float zoomLevel) 设置地图的缩放级别。 这个值的取值范围是[3,19]。 参数:
		 * zoomLevel - 缩放级别,取值范围是[3,19] 返回: 新的缩放级别,取值范围[3,19]。
		 * 
		 * --在1.3x之前是[3,18],地图的文件格式不一样(文件的大小大大缩小),新增3D显示
		 */
		mapController.setZoom(12);

	}

	private void checkKey() {
		manager = new BMapManager(getApplicationContext());

		manager.init(ConstantValue.KEY, new MKGeneralListener() {

			/**
			 * 验证授权
			 */
			@Override
			public void onGetPermissionState(int isError) {
				if (isError == MKEvent.ERROR_PERMISSION_DENIED) {
					Toast.makeText(HelloBaiDuMap.this, "授权失败",
							Toast.LENGTH_SHORT).show();
				}
			}

			/**
			 * 验证网络
			 */
			@Override
			public void onGetNetworkState(int isError) {
				if (isError == MKEvent.ERROR_NETWORK_CONNECT) {
					Toast.makeText(HelloBaiDuMap.this, "网络出错",
							Toast.LENGTH_SHORT).show();
				}
			}
		});
	}

	/**
	 * 现阶段存在的问题,当再次进入的时候,mapview的显示出现问题
	 * 
	 * 解决方法就是重载下边几个方法
	 */

	@Override
	protected void onResume() {
		mapView.onResume();
		super.onResume();
	}

	@Override
	protected void onPause() {
		mapView.onPause();
		super.onPause();
	}

	@Override
	protected void onDestroy() {
		mapView.destroy();
		super.onDestroy();
	}

	/**
	 * 添加事件
	 */
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case R.id.pingyi: // 平移:打字和动画跑到这个地方
			mapController.animateTo(hmGeoPoint);

			// 如果要设置地图的中心点的话是:mapController.setCenter(arg0);
			break;

		case R.id.putongxuanzhaun:// 旋转
			// 获取地图的当前角度
			int mapRotation = mapView.getMapRotation();
			// 增加角度
			mapRotation += 30;
			// 将增加的角度设置给地图
			mapController.setRotation(mapRotation);
			break;

		case R.id.gaojixuanzhuan:// 旋转:平面内的旋转,旋转30度,将增加好的值设置给地图即可

			int mapOverlooking = mapView.getMapOverlooking();
			mapOverlooking -= 5;
			mapController.setOverlooking(mapOverlooking);
			break;

		case R.id.fangda:
			mapController.zoomIn(); // 放大一级
			break;

		case R.id.suoxiao:
			mapController.zoomOut(); // 缩小一级
			break;
		}
		return super.onOptionsItemSelected(item);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.menu_hellobaidumap, menu);
		return true;
	}

}

package com.xuliugen.baidumap;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.map.ItemizedOverlay;
import com.baidu.mapapi.map.MKEvent;
import com.baidu.mapapi.map.MapController;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.OverlayItem;
import com.baidu.platform.comapi.basestruct.GeoPoint;

/*
 * 在地图上显示图片的信息
 * 
 * 多条目的绘制
 */
public class ItemizedOverlayDemo extends Activity {

	private BMapManager manager;
	private MapView mapView;
	private MapController mapController;
	private View pop;
	private TextView titleTextView;

	int latitude = (int) (40.051 * 1E6);
	int longitude = (int) (116.303 * 1E6);
	private GeoPoint hmGeoPoint = new GeoPoint(latitude, longitude);

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		checkKey();
		setContentView(R.layout.activity_main);
		init();
		initPop();
		draw();
	}

	/**
	 * 初始化泡泡
	 */
	private void initPop() {
		pop = View.inflate(this, R.layout.pop, null);
		titleTextView = (TextView) pop.findViewById(R.id.title);

		pop.setVisibility(View.INVISIBLE);
		// 添加到mapview容器中
		mapView.addView(pop);
	}

	private void draw() {
		// 装OverlayItem的集合
		/*
		 * public ItemizedOverlay(Drawable defaultMarker,MapView mapView)
		 * 创建一个新的ItemizedOverlay 参数: defaultMarker -
		 * item默认显示在地图上的的Drawable,为了正确绘制标记点
		 * ,需要给它添加边界,例如boundCenterBottom(marker))
		 */
		ItemizedOverlay<OverlayItem> overlay = new ItemizedOverlay<OverlayItem>(
				this.getResources().getDrawable(R.drawable.eat_logo), mapView) {
			/**
			 * 处理一个item的点击事件
			 */
			@Override
			protected boolean onTap(int index) {
				OverlayItem item = this.getItem(index);
				String title = item.getTitle();
				// Toast.makeText(ItemizedOverlayDemo.this, title,
				// Toast.LENGTH_SHORT).show();

				titleTextView.setText(title);

				// 更新泡泡的位置:通过使用params于经纬度建立关系
				// item.getPoint();// 获得经纬度
				MapView.LayoutParams params = new MapView.LayoutParams(
						MapView.LayoutParams.WRAP_CONTENT,
						MapView.LayoutParams.WRAP_CONTENT, item.getPoint(),
						MapView.LayoutParams.BOTTOM_CENTER);
				mapView.updateViewLayout(pop, params);
				pop.setVisibility(View.VISIBLE);
				mapView.refresh();

				return super.onTap(index);
			}
		};
		setData(overlay);
		mapView.getOverlays().add(overlay);
		mapView.refresh();
	}

	private void setData(ItemizedOverlay<OverlayItem> overlay) {
		/**
		 * OverlayItem public OverlayItem(GeoPoint point, String title, String
		 * snippet)
		 * 
		 * snippet:片段的简介
		 */
		OverlayItem item = new OverlayItem(hmGeoPoint, "黑马训练营", "不4k不就业");
		overlay.addItem(item);

		item = new OverlayItem(new GeoPoint(latitude + 1000, longitude), "向北",
				"增加纬度");
		overlay.addItem(item);

		item = new OverlayItem(new GeoPoint(latitude, longitude + 1000), "向东",
				"增加经度");
		overlay.addItem(item);

		item = new OverlayItem(new GeoPoint(latitude - 1000, longitude - 1000),
				"向西南", "减少经纬度");

		overlay.addItem(item);

	}

	private void init() {
		mapView = (MapView) this.findViewById(R.id.ii_mapview);
		mapView.setBuiltInZoomControls(true); // 添加放大缩小按钮
		mapController = mapView.getController();
		mapController.setZoom(12);
	}

	private void checkKey() {
		manager = new BMapManager(getApplicationContext());

		manager.init(ConstantValue.KEY, new MKGeneralListener() {

			@Override
			public void onGetPermissionState(int isError) {
				if (isError == MKEvent.ERROR_PERMISSION_DENIED) {
					Toast.makeText(ItemizedOverlayDemo.this, "授权失败",
							Toast.LENGTH_SHORT).show();
				}
			}

			@Override
			public void onGetNetworkState(int isError) {
				if (isError == MKEvent.ERROR_NETWORK_CONNECT) {
					Toast.makeText(ItemizedOverlayDemo.this, "网络出错",
							Toast.LENGTH_SHORT).show();
				}
			}
		});
	}

	@Override
	protected void onResume() {
		mapView.onResume();
		super.onResume();
	}

	@Override
	protected void onPause() {
		mapView.onPause();
		super.onPause();
	}

	@Override
	protected void onDestroy() {
		mapView.destroy();
		super.onDestroy();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
}
package com.xuliugen.baidumap;

import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.map.MKEvent;
import com.baidu.mapapi.map.MapController;
import com.baidu.mapapi.map.MapView;
import com.baidu.platform.comapi.basestruct.GeoPoint;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;

public class LayerDemo extends Activity {
	private BMapManager manager; // 地图引擎管理工具
	private MapView mapView; // 地图的展示时控件
	private MapController mapController; // 控制地图的平移、缩放、旋转(MapView和MapController)

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		/*
		 * 验证key,只有成功才会有数据的显示
		 */
		checkKey();
		setContentView(R.layout.activity_layerdemo);
		init();
	}

	private void init() {
		mapView = (MapView) this.findViewById(R.id.ii_mapview2);

		mapView.setBuiltInZoomControls(true); // 添加放大缩小按钮
		mapController = mapView.getController();

		mapController.setZoom(12);

	}

	private void checkKey() {
		manager = new BMapManager(getApplicationContext());

		manager.init(ConstantValue.KEY, new MKGeneralListener() {

			@Override
			public void onGetPermissionState(int isError) {
				if (isError == MKEvent.ERROR_PERMISSION_DENIED) {
					Toast.makeText(LayerDemo.this, "授权失败", Toast.LENGTH_SHORT)
							.show();
				}
			}

			@Override
			public void onGetNetworkState(int isError) {
				if (isError == MKEvent.ERROR_NETWORK_CONNECT) {
					Toast.makeText(LayerDemo.this, "网络出错", Toast.LENGTH_SHORT)
							.show();
				}
			}
		});
	}

	@Override
	protected void onResume() {
		mapView.onResume();
		super.onResume();
	}

	@Override
	protected void onPause() {
		mapView.onPause();
		super.onPause();
	}

	@Override
	protected void onDestroy() {
		mapView.destroy();
		super.onDestroy();
	}

	/**
	 * 添加事件
	 */

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case R.id.ditu: // 底图
			mapView.setTraffic(false);
			mapView.setSatellite(false);
			break;

		case R.id.shishijiaotong:// 实时交通
			mapView.setTraffic(true);
			mapView.setSatellite(false);
			break;

		case R.id.weixingtu:// 卫星图 mapView.setTraffic(false);
			mapView.setSatellite(true);
			break;
		}
		return super.onOptionsItemSelected(item);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.menu_layerdemo, menu);
		return true;
	}

}

package com.xuliugen.baidumap;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;

/*
 * 多个demo的启动页面
 */
public class MainActivity extends Activity {

	private static String[] obvject = new String[] { "HelloBaiDuMap", "图层",
			"几何图形元素", "展示文字", "多条自绘制(带提示框)", "圆形区域搜索", "全城搜索", "驾车路线", "步行路线",
			"公交换乘", "我的位置" };

	private ListView listView;
	private ArrayAdapter<String> adapter;

	private static Class[] clazz = new Class[] { HelloBaiDuMap.class,
			LayerDemo.class, GraphicsOverlayDemo.class, TextOverlayDemo.class,
			ItemizedOverlayDemo.class, PoiSearchNearbyDemo.class,
			PoiSearchInCityDemo.class, DrivingSearchDemo.class,
			WalkingSearchDemo.class, TransitOverlayDemo.class,
			MyLocationOverlayDemo.class };

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.in_door);

		listView = (ListView) findViewById(R.id.list);

		adapter = new ArrayAdapter<String>(getApplicationContext(),
				R.layout.item, obvject);

		listView.setAdapter(adapter);

		listView.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				Intent intent = new Intent(getApplicationContext(),
						clazz[position]);
				startActivity(intent);
			}
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

package com.xuliugen.baidumap;

import android.os.Bundle;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.map.LocationData;
import com.baidu.mapapi.map.MyLocationOverlay;
import com.baidu.platform.comapi.basestruct.GeoPoint;

/**
 * 定位的操作
 * 
 */
public class MyLocationOverlayDemo extends BaseActivity {

	private LocationClient client;
	private BDLocationListener listener;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
	}

	@Override
	protected void onResume() {
		Location();

		client.start();

		super.onResume();
	}

	/**
	 * 比较耗费资源的东西在onresume中实现,在onpause中结束
	 */
	@Override
	protected void onPause() {
		client.stop();
		super.onPause();
	}

	/*
	 * 定位的功能实现
	 */
	private void Location() {
		client = new LocationClient(this);
		listener = new MyBDLocationListener();

		// client数据的设置,如:多久、间隔时间发送获取位置的请求等
		LocationClientOption option = new LocationClientOption();
		option.setOpenGps(true);
		option.setAddrType("all");// 返回的定位结果包含地址信息
		option.setCoorType("bd09ll");// 返回的定位结果是百度经纬度,默认值gcj02
		option.setScanSpan(5000);// 设置发起定位请求的间隔时间为5000ms
		option.disableCache(true);// 禁止启用缓存定位
		option.setPoiNumber(5); // 最多返回POI个数
		option.setPoiDistance(1000); // poi查询距离
		client.setLocOption(option);

		client.registerLocationListener(listener);
	}

	/*
	 * 自定义的listener实现BDLocationListener接口
	 */
	public class MyBDLocationListener implements BDLocationListener {

		@Override
		public void onReceiveLocation(BDLocation location) {
			if (location == null) {
				return;
			}
			location.getLongitude();// 获取经度
			location.getLatitude(); // 获取维度

			// 定位覆盖物
			MyLocationOverlay overlay = new MyLocationOverlay(mapView);
			LocationData data = new LocationData();
			data.latitude = location.getLatitude();
			data.longitude = location.getLongitude();

			overlay.setData(data);

			mapView.getOverlays().add(overlay);
			mapView.refresh();

			GeoPoint point = new GeoPoint((int) (data.longitude * 1E6),
					(int) (data.latitude * 1E6));
			// 定位到该点
			mapController.animateTo(point);

		}

		@Override
		public void onReceivePoi(BDLocation arg0) {

		}

	}
}

package com.xuliugen.baidumap;

import java.util.ArrayList;

import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

import com.baidu.mapapi.map.PoiOverlay;
import com.baidu.mapapi.search.MKPoiInfo;
import com.baidu.mapapi.search.MKPoiResult;
import com.baidu.mapapi.search.MKSearch;
import com.baidu.mapapi.search.MKSearchListener;

/**
 * 全程范围内的搜索
 * 
 * 侧重点是分页的效果
 */
public class PoiSearchInCityDemo extends BaseActivity {
	private MKSearch mkSearch;
	private MKSearchListener mkSearchListener;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
	}

	@Override
	protected void onResume() {
		search();
		super.onResume();
	}

	private void search() {
		mkSearch = new MKSearch();
		mkSearchListener = new MyMKSearchListenerAdapter() {

			@Override
			public void onGetPoiResult(MKPoiResult result, int type, int iError) {
				if (iError == 0) {
					if (result != null) {
						PoiOverlay overlay = new PoiOverlay(
								PoiSearchInCityDemo.this, mapView);
						setData(overlay, result);
						mapView.getOverlays().clear(); // 当粉也较多的时候,没显示下一页做一次清理的工作
						mapView.getOverlays().add(overlay);
						mapView.refresh();
					}
				} else {
					Toast.makeText(PoiSearchInCityDemo.this, "未查询到结果",
							Toast.LENGTH_SHORT).show();
				}
			}
		};
		mkSearch.init(manager, mkSearchListener); // 绑定
		mkSearch.poiSearchInCity("北京", "加油站");// 全程搜索
	}

	private void setData(PoiOverlay overlay, MKPoiResult result) {
		// result.getAllPoi(); // 当前页的数据信息,默认的是10条数据
		ArrayList<MKPoiInfo> datas = result.getAllPoi();
		overlay.setData(datas);

		// ArrayList<MKPoiInfo> getAllPoi()
		//
		// MKCityListInfo getCityListInfo(int index)
		// 获取第index个城市信息,index从0开始
		// int getCityListNum()
		// 返回城市列表页的结果数
		// int getCurrentNumPois()
		// 获取当前页的poi结果数
		// ArrayList<MKPoiResult> getMultiPoiResult()
		//
		// int getNumPages()
		// 获取本次poi搜索的总页数
		// int getNumPois()
		// 获取本次poi搜索的总结果数
		// int getPageIndex()
		// 返回当前页的索引
		// MKPoiInfo getPoi(int index)
		// 获取第index个poi信息

		// 当前页/共几页 当前页的条目数:/总条目数:
		String info = " 当前页:" + result.getPageIndex() + "/共几页:"
				+ result.getNumPages() + "  当前页的条目数:"
				+ result.getCurrentNumPois() + "/总条目数:" + result.getNumPois();
		Toast.makeText(PoiSearchInCityDemo.this, info, Toast.LENGTH_SHORT)
				.show();
	}

	// 当前页
	private int currentPage = 0;

	/**
	 * 添加事件
	 */
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case R.id.nextpage: // 下一页

			// 当前页+1
			currentPage++;
			mkSearch.goToPoiPage(currentPage);// 获取下一页的数据
			break;
		case R.id.prepage: // 上一页

			// 当前页+1
			currentPage--;
			mkSearch.goToPoiPage(currentPage);// 获取上一页的数据
			break;
		}
		return super.onOptionsItemSelected(item);
	}

	/**
	 * 自定义菜单
	 */
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.menu_poisearchincitydemo, menu);
		return true;
	}
}
package com.xuliugen.baidumap;

import java.util.ArrayList;

import android.os.Bundle;
import android.view.Menu;
import android.widget.Toast;

import com.baidu.mapapi.map.PoiOverlay;
import com.baidu.mapapi.search.MKPoiInfo;
import com.baidu.mapapi.search.MKPoiResult;
import com.baidu.mapapi.search.MKSearch;
import com.baidu.mapapi.search.MKSearchListener;

/**
 * 兴趣点检索(圆形区域+全城(分页处理))
 * 
 * 圆形兴趣点的搜索
 * 
 */
public class PoiSearchNearbyDemo extends BaseActivity {

	private MKSearch mkSearch;
	private MKSearchListener mkSearchListener;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		// 搜索
		search();
	}

	private void search() {
		mkSearch = new MKSearch();
		mkSearchListener = new MyMKSearchListenerAdapter() {
			/**
			 * 返回的数据
			 */
			@Override
			public void onGetPoiResult(MKPoiResult result, int type, int iError) {
				// 处理圆形区域内数据展示
				if (iError == 0) { // 成功的情况
					if (result != null) {
						PoiOverlay overlay = new PoiOverlay(
								PoiSearchNearbyDemo.this, mapView);
						setDate(overlay, result); // 设置数据
						mapView.getOverlays().add(overlay);
						mapView.refresh();
					}
				} else {
					Toast.makeText(PoiSearchNearbyDemo.this, "未查询到结果",
							Toast.LENGTH_SHORT).show();
				}
				super.onGetPoiResult(result, type, iError);
			}

			private void setDate(PoiOverlay overlay, MKPoiResult result) {
				ArrayList<MKPoiInfo> datas = result.getAllPoi(); // 往集合放数据

				overlay.setData(datas);
			}
		};

		mkSearch.init(manager, mkSearchListener); // 建立关系

		// 发送搜索请求的信息
		mkSearch.poiSearchNearBy("加油站", hmGeoPoint, 1000); // 搜索的内容是什么
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.menu_layerdemo, menu);
		return true;
	}

}


package com.xuliugen.baidumap;

import android.app.Activity;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.Menu;
import android.widget.Toast;

import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.map.MKEvent;
import com.baidu.mapapi.map.MapController;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.Symbol;
import com.baidu.mapapi.map.Symbol.Color;
import com.baidu.mapapi.map.TextItem;
import com.baidu.mapapi.map.TextOverlay;
import com.baidu.platform.comapi.basestruct.GeoPoint;

/*
 * 在地图上绘制文字
 */
public class TextOverlayDemo extends Activity {
	private BMapManager manager;
	private MapView mapView;
	private MapController mapController;

	int latitude = (int) (40.051 * 1E6);
	int longitude = (int) (116.303 * 1E6);
	private GeoPoint hmGeoPoint = new GeoPoint(latitude, longitude);

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		checkKey();
		setContentView(R.layout.activity_main);
		init();

		draw();
	}

	private void draw() {
		// 1.绘制文字
		TextOverlay overlay = new TextOverlay(mapView);
		setData(overlay);
		mapView.getOverlays().add(overlay);
		mapView.refresh();
	}

	private void setData(TextOverlay overlay) {
		TextItem item = new TextItem();
		// int align
		// 文字对齐方式 ,为 ALIGN_TOP,ALIGN_CENTER, ALIGN_BOTTOM中的一个值
		// static int ALIGN_BOTTOM
		// 文字对齐参数,下边中点对齐
		// static int ALIGN_CENTER
		// 文字对齐参数,中心对齐
		// static int ALIGN_TOP
		// 文字对齐参数,上边中点对齐
		// Symbol.Color bgColor
		// 文字背景色, 默认为透明
		// Symbol.Color fontColor
		// 文字颜色
		// int fontSize
		// 字号大小
		// GeoPoint pt
		// 文字显示的位置,用经纬度坐标表示
		// String text
		// 要显示的文字内容
		// Typeface typeface
		// 文字字体, android 字体表示,为空则用系统默认字体.

		item.align = TextItem.ALIGN_CENTER;
		item.fontColor = getColor();
		item.fontSize = 20;
		item.pt = hmGeoPoint;
		item.text = "黑马训练营";
		item.typeface = Typeface.DEFAULT_BOLD; // 粗体

		overlay.addText(item);
	}

	private Color getColor() {
		Symbol symbol = new Symbol();
		Symbol.Color color = symbol.new Color();

		color.red = 255;
		color.green = 0;
		color.blue = 0;
		color.alpha = 100;
		return color;
	}

	private void init() {
		mapView = (MapView) this.findViewById(R.id.ii_mapview);

		mapView.setBuiltInZoomControls(true); // 添加放大缩小按钮
		mapController = mapView.getController();

		mapController.setZoom(12);

	}

	private void checkKey() {
		manager = new BMapManager(getApplicationContext());

		manager.init(ConstantValue.KEY, new MKGeneralListener() {

			@Override
			public void onGetPermissionState(int isError) {
				if (isError == MKEvent.ERROR_PERMISSION_DENIED) {
					Toast.makeText(TextOverlayDemo.this, "授权失败",
							Toast.LENGTH_SHORT).show();
				}
			}

			@Override
			public void onGetNetworkState(int isError) {
				if (isError == MKEvent.ERROR_NETWORK_CONNECT) {
					Toast.makeText(TextOverlayDemo.this, "网络出错",
							Toast.LENGTH_SHORT).show();
				}
			}
		});
	}

	@Override
	protected void onResume() {
		mapView.onResume();
		super.onResume();
	}

	@Override
	protected void onPause() {
		mapView.onPause();
		super.onPause();
	}

	@Override
	protected void onDestroy() {
		mapView.destroy();
		super.onDestroy();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
}

package com.xuliugen.baidumap;

import android.os.Bundle;
import android.widget.Toast;

import com.baidu.mapapi.map.TransitOverlay;
import com.baidu.mapapi.search.MKPlanNode;
import com.baidu.mapapi.search.MKSearch;
import com.baidu.mapapi.search.MKTransitRoutePlan;
import com.baidu.mapapi.search.MKTransitRouteResult;

/**
 * 公交换乘
 * 
 */
public class TransitOverlayDemo extends BaseActivity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
	}

	@Override
	protected void onResume() {
		search();
		super.onResume();
	}

	private void search() {
		MKSearch mkSearch = new MKSearch();
		mkSearch.init(manager, new MyMKSearchListenerAdapter() {
			@Override
			public void onGetTransitRouteResult(MKTransitRouteResult result,
					int iError) {
				if (iError == 0) {
					if (result != null) {
						// 公交换乘需要使用的覆盖物不一样的
						TransitOverlay overlay = new TransitOverlay(
								TransitOverlayDemo.this, mapView);
						setData(overlay, result);
						mapView.getOverlays().add(overlay);
						mapView.refresh();
					}
				} else {
					Toast.makeText(TransitOverlayDemo.this, "未查询到结果",
							Toast.LENGTH_SHORT).show();
				}
			}
		});
		// 起点所在城市--搜索的起点--终点所在城市--搜索的终点 ;返回成功为0 否则为-1
		MKPlanNode start = new MKPlanNode();
		start.pt = hmGeoPoint; // 起点所在城市

		MKPlanNode end = new MKPlanNode();
		end.name = "天安门";

		mkSearch.setTransitPolicy(MKSearch.EBUS_WALK_FIRST);// 设置策略
		mkSearch.transitSearch("北京", start, end);
	}

	protected void setData(TransitOverlay overlay, MKTransitRouteResult result) {
		if (result.getNumPlan() > 0) {
			
			MKTransitRoutePlan data =result.getPlan(0);
			overlay.setData(data);
		}
	}
}


package com.xuliugen.baidumap;

import android.os.Bundle;
import android.widget.Toast;

import com.baidu.mapapi.map.RouteOverlay;
import com.baidu.mapapi.search.MKPlanNode;
import com.baidu.mapapi.search.MKRoute;
import com.baidu.mapapi.search.MKRoutePlan;
import com.baidu.mapapi.search.MKSearch;
import com.baidu.mapapi.search.MKWalkingRouteResult;
import com.baidu.platform.comapi.basestruct.GeoPoint;

/**
 * 步行的检索
 * 
 */
public class WalkingSearchDemo extends BaseActivity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
	}

	@Override
	protected void onResume() {
		search();
		super.onResume();
	}

	private void search() {
		MKSearch mkSearch = new MKSearch();
		mkSearch.init(manager, new MyMKSearchListenerAdapter() {
			@Override
			public void onGetWalkingRouteResult(MKWalkingRouteResult result,
					int iError) {
				if (iError == 0) {
					if (result != null) {
						RouteOverlay overlay = new RouteOverlay(
								WalkingSearchDemo.this, mapView);
						setData(overlay, result);
						mapView.getOverlays().clear(); // 当粉也较多的时候,没显示下一页做一次清理的工作
						mapView.getOverlays().add(overlay);
						mapView.refresh();
					}
				} else {
					Toast.makeText(WalkingSearchDemo.this, "未查询到结果",
							Toast.LENGTH_SHORT).show();
				}
			}
		});
		MKPlanNode start = new MKPlanNode();
		start.pt = hmGeoPoint;

		MKPlanNode end = new MKPlanNode();
		end.pt = new GeoPoint(40065796, 116349868);

		mkSearch.walkingSearch("北京", start, "北京", end);
	}

	protected void setData(RouteOverlay overlay, MKWalkingRouteResult result) {
		if (result.getNumPlan() > 0) {
			MKRoutePlan plan = result.getPlan(0);
			MKRoute data = plan.getRoute(0);

			overlay.setData(data);
		}
	}
}


资源文件中的内容省略!

完整项目如下:http://download.csdn.net/detail/u010870518/8455285



相关文章:

  • Handler的基本使用
  • Andriod Studio Clear Project或Rebuild Project出错
  • Activity的生命周期
  • javascript实现URL不缓存的方法
  • Android Studio VS Eclipse (还在用Eclipse?你OUT了!)
  • Android之TextView灵活使用
  • Android Studio安装后Fetching android sdk component information超时的解决方案
  • Git配置出现的问题
  • Android-studio+Genymotion模拟器的联合使用
  • 工作中遇到的一个多线程下导致RCW无法释放的问题
  • Android实例-拨打电话
  • 博弈SG函数
  • Android实例-发送信息
  • 利用jQuery实现鼠标滑过整行变色
  • Android项目之无线点餐(1)--点餐系统数据库设计
  • [译] 怎样写一个基础的编译器
  • 〔开发系列〕一次关于小程序开发的深度总结
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • C语言笔记(第一章:C语言编程)
  • ECMAScript入门(七)--Module语法
  • Intervention/image 图片处理扩展包的安装和使用
  • JavaScript 基本功--面试宝典
  • PHP的Ev教程三(Periodic watcher)
  • Spark学习笔记之相关记录
  • vue 个人积累(使用工具,组件)
  • 基于遗传算法的优化问题求解
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 学习笔记:对象,原型和继承(1)
  • 译有关态射的一切
  • 最简单的无缝轮播
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • # C++之functional库用法整理
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (20050108)又读《平凡的世界》
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (动态规划)5. 最长回文子串 java解决
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (四) 虚拟摄像头vivi体验
  • (一)SpringBoot3---尚硅谷总结
  • (一)基于IDEA的JAVA基础1
  • (转载)Linux网络编程入门
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET正则基础之——正则委托
  • ::前边啥也没有
  • [] 与 [[]], -gt 与 > 的比较
  • [20170713] 无法访问SQL Server
  • [8-23]知识梳理:文件系统、Bash基础特性、目录管理、文件管理、文本查看编辑处理...
  • [BZOJ1178][Apio2009]CONVENTION会议中心
  • [daily][archlinux][game] 几个linux下还不错的游戏
  • [Java] 什么是IoC?什么是DI?它们的区别是什么?