地图的主要用法:
①图层展示。普通图、卫星图及交通流量图
②定位
③自定义绘制点、线等几何图形
④覆盖物功能
⑤离线地图
⑥POI搜索
⑦地理编码
⑧路径规划
⑨公交路线查询
覆盖物功能
覆盖物功能:Overlay
Overlay中Marker和InfoWindow的结合使用
1.InfoWindow类
(1)作用:在地图中显示一个信息窗口
(2)构造方法:
public InfoWindow(View var1, LatLng var2, InfoWindow.OnInfoWindowClickListener var3) {
if(var1 != null && var2 != null) {
this.b = var1;
this.c = var2;
this.d = var3;
} else {
throw new IllegalArgumentException("view and position can not be null");
}
}
public InfoWindow(BitmapDescriptor var1, LatLng var2, InfoWindow.OnInfoWindowClickListener var3) {
if(var1 != null && var2 != null) {
this.a = var1;
this.c = var2;
this.d = var3;
} else {
throw new IllegalArgumentException("bitmapDescriptor and position can not be null");
}
}
虽然其中有一个View对象类型的参数,但是用inflate加载到里面我们自定义的布局文件时,它屏蔽了所有的布局样式,只加载布局中的文字。而且,布局中的任何点击事件都没有响应,这是一个大坑,以后要注意,(网页版的可以)但也有另一种解决方法,就是下面的。
2.Android中setTag()/getTag
(1)作用:View中的setTag(Onbect)表示给View添加一个格外的数据,以后可以用getTag()将这个数据取出来。
(2)好处:绑定数据,特别是绑定数据到view。而且可以用getTag()取得,很方便,而且是任意类型的数据
/**
* 根据info信息在布局上的控件上布置
*/
private void popupInfo(LinearLayout mMarkerLy, BridgeInfo info){
ViewHolder viewHolder = null;
if (mMarkerLy.getTag() == null)
{
viewHolder = new ViewHolder();
viewHolder.infoName = (TextView) mMarkerLy
.findViewById(R.id.info_name);
viewHolder.infoNumber = (TextView) mMarkerLy
.findViewById(R.id.info_number);
mMarkerLy.setTag(viewHolder);//有缓存作用
}
viewHolder = (ViewHolder) mMarkerLy.getTag();
viewHolder.infoName.setText(info.getBridgeName());
viewHolder.infoNumber.setText(info.getBridgeNumber());
}
/**
* 复用弹出面板mMarkerLy的控件
*
*/
private class ViewHolder
{
TextView infoName;
TextView infoNumber;
}
Marker传数据
BridgeInfo bridgeInfo=new BridgeInfo(Double.parseDouble(lat),Double.parseDouble(lon),name,number,id);
Bundle bundle = new Bundle();
bundle.putSerializable("info",bridgeInfo);
mMarkerA.setExtraInfo(bundle);
Marker接收数据
// 获得marker中的数据
final BridgeInfo info = (BridgeInfo) marker.getExtraInfo().get("info");
百度地图对Marker有对点击和拖动的监听setOnMarkerClickListener和setOnMarkerDragListener。若要对Marker可以进行拖动
OverlayOptions ooA = new MarkerOptions()
.position(llA)
.icon(bd)
.zIndex(9)
.perspective(true)//开启近大远小
.draggable(true);//设置可拖动
mMarkerA = (Marker) (mBaiduMap.addOverlay(ooA));
目前我对百度地图中的覆盖了解多一点,向其他的功能了解相对比较少。但POI和地理编码功能都是比较常用的,也是比较简单。网上一搜一大堆资料,一看就懂了。我在这里就不多说啦!若你是第一次开发百度地图,百度APIkey申请时要注意一些问题。详情请看我的博客:http://blog.youkuaiyun.com/wanliguodu/article/details/49366407
如需要源码可给我留言!