百度地图中的覆盖物

本文介绍如何在Android应用中利用百度地图API添加和管理覆盖物,包括定位、绘制图标和自定义信息窗口等功能,适用于地理信息系统和位置服务开发的Android程序员。
百度地图中的覆盖物


百度地图中的覆盖物应该算是一个难点
覆盖物的基础请参考百度开发者(我这里就不详细说了)


我这里就说我觉得重要的几个
1.我的位置图层(结合百度定位SDK,可以实现地图的定位)
2.POI(信息点)、路线、公交图层
3.自定义图层
4.PopupOverlay弹出图层
5.文字、几何图层
6.自定义View


在百度地图可以正常显示的基础上,结合百度定位SDK,实现自己位置在地图上的显示
1.导入百度定位SDK 并增加相应权限

编写代码:微笑

			// 定位的实现
	public LocationClient locationClient = null;
	public BDLocationListener mylistener = new MyLocationListener();
	public MyLocationOverlay myLocationOverlay = null;// 负责显示当前用户的层
	public LocationData locationData = null;// 定位有关的初始化
//接下来:
      locationClient = new LocationClient(getApplicationContext());
		locationClient.registerLocationListener(mylistener);// 定位自己的位置,并向服务器更新自己的位置,IP,端口号信息等,在监听器里实现
		localinit();// 本地信息的一些初始化
		requestLocation();// 定位请求,请求过程
		
	public void requestLocation() {
		Toast.makeText(MainActivity.this, "定位...", Toast.LENGTH_SHORT).show();
		locationClient.requestLocation();// ??locationClient是什么类,API和工程里没有它的定义
	}	
	public void localinit() {
		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查询距离
		option.setPoiExtraInfo(true); // 是否需要POI的电话和地址等详细信息
		locationClient.setLocOption(option);
		locationClient.start();
	}
	

	/**
	 * 获取定位结果,获取POI信息
	 */
	public class MyLocationListener implements BDLocationListener {
		@SuppressLint("UseValueOf")
		@Override
		public void onReceiveLocation(BDLocation location) {
			if (location == null)
				return;
			/*
			 * 防止我的图层重复创建
			 */
			if (myLocationOverlay != null) {
				mapView.getOverlays().remove(myLocationOverlay);
			}
			myLocationOverlay = new locationOverlay(mapView);

			locationData = new LocationData();//
			locationData.latitude = location.getLatitude();
			locationData.longitude = location.getLongitude();
			myLocationOverlay.enableCompass();

			locationData.accuracy = location.getRadius();
			locationData.direction = location.getDerect();
			myLocationOverlay.setData(locationData);
			ptstart = new GeoPoint((int) (location.getLatitude() * 1e6),
					(int) (location.getLongitude() * 1e6));
			mapView.getOverlays().add(myLocationOverlay);// 添加自己位置的图层
			mapView.refresh();

			mapController.animateTo(ptstart);
			// 在lbs云上更新自己的信息
 /*if (per.getId() != null) {per.setIp(udp_SendRecv.getLocalIpAddress());per.setLatitude(locationData.latitude);per.setLongitude(locationData.longitude);per.setPort(new Integer(port).toString());per.setAdressString(location.getAddrStr());// 增加的字段// Toast.makeText(MainActivity.this, "id为" +// per.getId(),Toast.LENGTH_SHORT).show();/* * 百度的地图格式 经纬度 ip port 心情 *//*
				String cmd = per.getId() + ",original_lat="
						+ locationData.latitude + "&original_lon="
						+ locationData.longitude + "&telephone=" + per.getIp()
						+ "&name=" + per.getNameString() + "&zip_code="
						+ per.getPort()/* 增加心情字段 */+ "&address="
						+ per.getFelling() + "&category_id=" + per.getGender();
				progress.setVisibility(View.VISIBLE);
				httpclient.request(cmd, 3, handler);
			}*/
		}

		public void onReceivePoi(BDLocation poiLocation) {
			if (poiLocation == null) {
				return;
			}
		}
	}

其他的图层pop 自定义图层我都在上一张的事件中有提到(但是我的代码不适合  它里面还集成了很多其他的 如新浪微博接口)
还是很建议初学者多去看看百度的开发者文档(里面的多看多实践  你才会有所创新)
百度的开发者文档我看了最少不下5遍(但是每次在用到的时候还是要参考百度示例demo)
百度的类库我也看了总结了  但每次还是会有新的体会
如果大家想在自己定位图层增加点击事件 
继承MyLocationOverlay重写dispatchTap实现点击处理

可以增加如下代码:

	// 继承MyLocationOverlay重写dispatchTap实现点击处理
	public class locationOverlay extends MyLocationOverlay {

		public locationOverlay(MapView mapView) {
			super(mapView);
		}

		@Override
		protected boolean dispatchTap() {
			if (kkkkk>1) {
				return false;
			}
			myinfo(per);// 弹出自定义的对话框
			return false;
		}
	}


























                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值