百度地图中的覆盖物

来源:互联网 发布:手机淘宝上怎么开网店 编辑:程序博客网 时间:2024/05/18 00:15
百度地图中的覆盖物


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


我这里就说我觉得重要的几个
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);//设置发起定位请求的间隔时间为5000msoption.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")@Overridepublic 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);}@Overrideprotected boolean dispatchTap() {if (kkkkk>1) {return false;}myinfo(per);// 弹出自定义的对话框return false;}}