百度地图中的覆盖物
百度地图中的覆盖物应该算是一个难点
覆盖物的基础请参考百度开发者(我这里就不详细说了)
我这里就说我觉得重要的几个
1.我的位置图层(结合百度定位SDK,可以实现地图的定位)
2.POI(信息点)、路线、公交图层
3.自定义图层
4.PopupOverlay弹出图层
5.文字、几何图层
6.自定义View
在百度地图可以正常显示的基础上,结合百度定位SDK,实现自己位置在地图上的显示
1.导入百度定位SDK 并增加相应权限
其他的图层pop 自定义图层我都在上一张的事件中有提到(但是我的代码不适合 它里面还集成了很多其他的 如新浪微博接口)
还是很建议初学者多去看看百度的开发者文档(里面的多看多实践 你才会有所创新)
百度的开发者文档我看了最少不下5遍(但是每次在用到的时候还是要参考百度示例demo)
百度的类库我也看了总结了 但每次还是会有新的体会
如果大家想在自己定位图层增加点击事件
继承MyLocationOverlay重写dispatchTap实现点击处理
百度地图中的覆盖物应该算是一个难点
覆盖物的基础请参考百度开发者(我这里就不详细说了)
我这里就说我觉得重要的几个
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;
}
}