目前百度地图SDK所提供的地图等级为3-19级,所包含的信息有建筑物、道路、河流、学校、公园等内容。所有叠加或覆盖到地图的内容,我们统称为地图覆盖物。如标注、矢量图形元素(包括:折线、多边形和圆等)、定位图标等。覆盖物拥有自己的地理坐标,当您拖动或缩放地图时,它们会相应的移动。我们可根据自己实际的业务需求,利用标注覆盖物,在地图指定的位置上添加标注信息。
一、APIs
1.LatLng类
(1)作用:地理坐标基本数据结构,在包com.baidu.mapapi.model.LatLng中。
(2)构造方法与成员变量
LatLng(double latitude, double longitude) 构造函数
◇final double longitude :经度
◇final double latitude :纬度
2.Overlay类
(1)作用:地图覆盖物基类,已知直接子类Marker, Polygon, Polyline, Text
(2)成员方法
◇Bundle getExtraInfo() :获取覆盖物额外信息
◇int getZIndex() :获取覆盖物 zIndex
◇boolean isVisible() :设置覆盖物可见性
◇void remove() :删除该覆盖物
◇void setExtraInfo(Bundle extraInfo) :设置覆盖物额外信息
◇void setVisible(boolean visible) :获取覆盖物可见性
◇void setZIndex(int zIndex) :设置覆盖物 zIndex
3.OverlayOptions类
(1)作用:地图覆盖物选型基类,直接已知子类MarkerOptions, PolygonOptions, PolylineOptions, TextOptions等
(2)构造方法:OverlayOptions()
4.PolygonOptions类
(1)作用:创建多边形覆盖物选项类
(2)构造方法:PolygonOptions()
(3)常用方法
◇PolygonOptions points(java.util.List points) :设置多边形坐标点列表
◇PolygonOptions stroke(Stroke stroke) :设置多边形边框信息
◇PolygonOptions visible(boolean visible) :设置多边形可见性
◇PolygonOptions zIndex(int zIndex) :设置多边形 zIndex,即所在的层级
◇PolygonOptions fillColor(int color) :设置多边形填充颜色
5.Marker类
(1)作用:定义地图 Marker 覆盖物基类,继承于Overlay类
(2)常用方法
◇LatLng getPosition() :获取 Marker 覆盖物的位置坐标
◇void setDraggable(boolean draggable) :设置 marker 是否允许拖拽,默认不可拖拽
◇void setIcon(BitmapDescriptor icon) :设置 Marker 覆盖物的图标,相同图案的 icon 的 Marker 最好使用同一个 BitmapDescriptor
对象以节省内存空间
◇void setIcons(java.util.ArrayList icons) :设置 Marker 覆盖物的图标,相同图案的 icon 的 marker 最好使用同一个 BitmapDescriptor 对象以节省内存空间。
◇void setPeriod(int period) :设置多少帧刷新一次图片资源,Marker动画的间隔时间,值越小动画越快
◇void setPerspective(boolean perspective) :设置是否开启 Marker 覆盖物近大远小效果,默认开启
◇void setPosition(LatLng position) :设置 Marker 覆盖物的位置坐标
◇void setRotate(float rotate) :设置 Marker 覆盖物旋转角度,逆时针
◇void setTitle(java.lang.String title) :设置 Marker 覆盖物的标题
◇void setToTop() :设置当前marker在最上面
6.MarkerOptions类
(1)作用:地图 Marker 覆盖物实现类 ,继承于OverlayOptions类
(2)构造方法:MarkerOptions()
(3)常用方法
MarkerOptions draggable(boolean draggable) :设置 marker 是否允许拖拽,默认不可拖拽
MarkerOptions period(int period) :设置多少帧刷新一次图片资源,Marker动画的间隔时间,值越小动画越快
MarkerOptions perspective(boolean perspective) :设置是否开启 marker 覆盖物近大远小效果,默认开启
MarkerOptions position(LatLng position) :设置 marker 覆盖物的位置坐标
MarkerOptions rotate(float rotate) :设置 marker 覆盖物旋转角度,逆时针
MarkerOptions title(java.lang.String title) :设置 marker 覆盖物的标题
MarkerOptions visible(boolean visible) :设置 marker 覆盖物的可见性
MarkerOptions zIndex(int zIndex) :设置 marker 覆盖物的 zIndex
7.BitmapDescriptor&BitmapDescriptorFactory类
(1)作用:BitmapDescriptor对象是bitmap (位图)描述信息;BitmapDescriptorFactory对象是bitmap 描述信息工厂类,在使用该类方法之前请确保已经调用了 SDKInitializer.initialize(Context) 函数以提供全局 Context 信息。
(2)BitmapDescriptorFactory重要方法
static BitmapDescriptor fromResource(int resourceId) :根据资源 Id 创建 bitmap 描述信息
static BitmapDescriptor fromBitmap(Bitmap image) :根据 Bitmap 创建描述信息
static BitmapDescriptor fromAsset(java.lang.String assetName) :根据资源名称创建bitmap描述信息
8.InfoWindow类
(1)作用:在地图中显示一个信息窗口,可以设置一个View作为该窗口的内容,也可以设置一个 BitmapDescriptor 作为该窗口的内容。
(2)构造方法
InfoWindow(BitmapDescriptor bd, LatLng position, int yOffset, InfoWindow.OnInfoWindowClickListener listener)
通过传入的 bitmap descriptor 构造一个 InfoWindow。
InfoWindow(View view, LatLng position, int yOffset)
通过传入的 view 构造一个 InfoWindow, 此时只是利用该view生成一个Bitmap绘制在地图中。
二、地图覆盖物实现方法
1.标注覆盖物
我们可根据自己实际的业务需求,利用标注覆盖物,在地图指定的位置上添加标注信息。
(1)只显示不可拖拽(Marker)标注覆盖物
1.BaiduMap mBaiduMap = mapView.getMap();
2.//定义Maker坐标点
3.LatLng point = new LatLng(39.963175, 116.400244);
4.//构建Marker图标
5.BitmapDescriptor bitmap = BitmapDescriptorFactory
6. .fromResource(R.drawable.icon_marka);
7.//构建MarkerOption,用于在地图上添加Marker
8.OverlayOptions option = new MarkerOptions()
9. .position(point)
10. .icon(bitmap);
11.//在地图上添加Marker,并显示
12.mBaiduMap.addOverlay(option);
(2)显示可拖拽(M
arker)标注覆盖物
针对已经添加在地图上的标注,可采用如下方式进行手势拖拽:
第一步,设置可拖拽
1.OverlayOptions options = new MarkerOptions()
2. .position(llA) //设置marker的位置
3. .icon(bdA) //设置marker图标
4. .zIndex(9) //设置marker所在层级
5. .draggable(true); //设置手势拖拽
6.//将marker添加到地图上
7.marker = (Marker) (mBaiduMap.addOverlay(options));
第二步
,设置监听方法
1.//调用BaiduMap对象的setOnMarkerDragListener方法设置marker拖拽的监听
2.mBaiduMap.setOnMarkerDragListener(new OnMarkerDragListener() {
3. public void onMarkerDrag(Marker marker) {
4. //拖拽中
5. }
6. public void onMarkerDragEnd(Marker marker) {
7. //拖拽结束
8. }
9. public void onMarkerDragStart(Marker marker) {
10. //开始拖拽
11. }
12.});
(3)显示动态(Marker)标注覆盖物
1.// 通过marker的icons设置一组图片,再通过period设置多少帧刷新一次图片资源
2.ArrayList giflist = new ArrayList();
3.giflist.add(bdA);
4.giflist.add(bdB);
5.giflist.add(bdC);
6.OverlayOptions ooD = new MarkerOptions().position(pt).icons(giflist)
7. .zIndex(0).period(10);
8.mMarkerD = (Marker) (mBaiduMap.addOverlay(ooD));
2.几何图形覆盖物
地图SDK提
供多种结合图形覆盖物,利用这些图形,可帮助您构建更加丰富多彩的地图应用。目前提供的几何图形有:点(Dot)、折线(Polyline)、弧线(Arc)、圆(Circle)、多边形(Polygon)
1.//定义多边形的五个顶点
2.LatLng pt1 = new LatLng(39.93923, 116.357428);
3.LatLng pt2 = new LatLng(39.91923, 116.327428);
4.LatLng pt3 = new LatLng(39.89923, 116.347428);
5.LatLng pt4 = new LatLng(39.89923, 116.367428);
6.LatLng pt5 = new LatLng(39.91923, 116.387428);
7.List pts = new ArrayList();
8.pts.add(pt1);
9.pts.add(pt2);
10.pts.add(pt3);
11.pts.add(pt4);
12.pts.add(pt5);
13.//构建用户绘制多边形的Option对象
14.OverlayOptions polygonOption = new PolygonOptions()
15. .points(pts)
16. .stroke(new Stroke(5, 0xAA00FF00))
17. .fillColor(0xAAFFFF00);
18.//在地图上添加多边形Option,用于显示
19.mBaiduMap.addOverlay(polygonOption);
1.
文字覆盖物
文字
,在地图中也是一种覆盖物,开发者可利用相关的接口,快速实现在地图上书写文字的需求。
1.//定义文字所显示的坐标点
2.LatLng llText = new LatLng(39.86923, 116.397428);
3.//构建文字Option对象,用于在地图上添加文字
4.OverlayOptions textOption = new TextOptions()
5. .bgColor(0xAAFFFF00)
6. .fontSize(24)
7. .fontColor(0xFFFF00FF)
8. .text(“百度地图SDK”)
9. .rotate(-30)
10. .position(llText);
11.//在地图上添加该文字对象并显示
12.mBaiduMap.addOverlay(textOption);
4.弹出窗覆盖物
弹出窗覆盖物的实现方式如下,我们可利用此接口,构建具有更强交互性的地图页面。 当点击Marker后弹出InfoWindow的示例图,我们只需将InfoWindow的显示方法写在Maker的点击事件处理中即可实现该效果。
1.//创建InfoWindow展示的view
2.Button button = new Button(getApplicationContext());
3.button.setBackgroundResource(R.drawable.popup);
4.//定义用于显示该InfoWindow的坐标点
5.LatLng pt = new LatLng(39.86923, 116.397428);
6.//创建InfoWindow , 传入 view, 地理坐标, y 轴偏移量
7.InfoWindow mInfoWindow = new InfoWindow(button, pt, -47);
8.//显示InfoWindow
9.mBaiduMap.showInfoWindow(mInfoWindow);
5.删除覆盖物
Marker marker = (Marker)mBaiduMap.addOverlay(option);
marker.remove(); //调用Marker对象的remove方法实现指定marker的删除几何图形覆盖物