1概述
所有叠加或覆盖到地图的内容,我们统称为地图覆盖物。如标注、矢量图形元素(包括:折线、多边形和圆)、定位图标等。覆盖物拥有自己的地理坐标,当您拖动或缩放地图时,它们会相应的移动。
百度地图SDK为开发者们提供了如下类型的地图覆盖物:
A. 我的位置图层(MyLocationOverlay):用于显示用户当前位置的图层;
B. Poi搜索结果图层(PoiOverlay):用于显示兴趣点搜索结果的图层;
C. 路线图层(RouteOverlay):公交、步行和驾车线路图层,将公交、步行和驾车出行方案的路线及关键点显示在地图上;
D. 公交换乘图层(TransitOverlay):公交换乘线路图层,将某一特定地区的公交出行方案的路线及换乘位置显示在地图上;
E. 自定义图层(ItemizedOverlay):可将一个或多个兴趣点绘制到地图上,且支持自定义图标;
F. 弹出窗图层(PopupOverlay):在地图上显示一个弹出窗口。
MapView使用一个List管理覆盖物,通过向MapView.getOverlays() add或remove上述类或其基类的实例即可向地图添加或删除覆盖物。在更新地图覆盖物后,需调用MapView.refresh()使更新生效。
2我的位置图层:MyLocationOverlay
将MyLocationOverlay添加到覆盖物中,能够实现在地图上显示当前位置的图标以及指南针:
自2.0.0版本开始,MyLocationOverlay只负责显示我的位置,位置数据可从其他渠道(建议使用百度定位SDK)获取,将获取的位置数据放在一个LocationData结构中并用该结构设置MyLcationOverlay的数据源,即可创建MyLocationOverlay。因此定位图层的使用略有不同,具体参考如下代码:
MyLocationOverlay myLocationOverlay = new MyLocationOverlay(mMapView);
LocationData locData = new LocationData();
//手动将位置源置为,在实际应用中,请使用百度定位SDK获取位置信息,要在SDK中显示一个位置,需要使用百度经纬度坐标(bd09ll)
locData.latitude = 39.945;
locData.longitude = 116.404;
locData.direction = 2.0f;
myLocationOverlay.setData(locData);
mMapView.getOverlays().add(myLocationOverlay);
mMapView.refresh();
mMapView.getController().animateTo(newGeoPoint((int)(locData.latitude*1e6), (int)(locData.longitude* 1e6)));
具体使用方法请参考官方Demo(LocationOverlayDemo.java)。
运行结果如下:
3 Poi搜索结果图层:PoiOverlay
具体使用方法请参考兴趣点搜索部分的相关介绍。
4路线图层:RouteOverlay
具体使用方法请参考路径规划中驾车及步行线路搜索相关部分的内容。
5公交换乘图层:TransitOverlay
具体使用方法请参考路径规划中公交线路搜索部分的内容。
6自定义图层:ItemizedOverlay
在地图上显示一个或一组覆盖物。
从2.0.0版本开始,SDK不支持直接继承Overlay ,用户可通过继承ItemizedOverlay来添加覆盖物。
添加覆盖物的一般流程如下:
1.
创建OverlayItem,准备overlay数据;
2.
继承ItemizedOverlay,至少重写createItem()和 size()方法。若要处理overlay
点击事件,请重写onTap()方法;
3. 调用MapView.getOverlays().add()方法添加overlay到mapview中;
4. 调用MapView.refresh()使Overlay生效。
核心代码如下:
public class OverItem Textends ItemizedOverlay<OverlayItem>{
private List<OverlayItem>GeoList=newArrayList<OverlayItem>();
private Context mContext;
private double mLat1 =39.90923;//39.9022; // point1纬度
private double mLon1 =116.397428;//116.3822; // point1经度
private double mLat2 =39.9022;
private double mLon2 =116.3922;
private double mLat3 =39.917723;
private double mLon3 =116.3722;
public OverItemT(Drawable marker, Context context){
super(marker);
this.mContext= context;
// 用给定的经纬度构造GeoPoint,单位是微度 (度 * 1E6)
GeoPoint p1 =newGeoPoint((int)(mLat1 * 1E6), (int)(mLon1 * 1E6));
GeoPoint p2 =newGeoPoint((int)(mLat2 * 1E6), (int)(mLon2 * 1E6));
GeoPoint p3 =newGeoPoint((int)(mLat3 * 1E6), (int)(mLon3 * 1E6));
GeoList.add(newOverlayItem(p1, "P1", "point1"));
GeoList.add(newOverlayItem(p2, "P2", "point2"));
GeoList.add(newOverlayItem(p3, "P3", "point3"));
populate();//createItem(int)方法构造item。一旦有了数据,在调用其它方法前,首先调用这个方法
}
@Override
protected OverlayItem createItem(int i){
return GeoList.get(i);
}
@Override
public int size(){
return GeoList.size();
}
@Override
// 处理当点击事件
protected boolean onTap(int i){
Toast.makeText(this.mContext, GeoList.get(i).getSnippet(),
Toast.LENGTH_SHORT).show();
return true;
}
}
添加到Overlay到MapView的覆盖物中:
Drawable marker =getResources().getDrawable(R.drawable.iconmark);//得到需要标在地图上的资源
mMapView.getOverlays().add(new OverItemT(marker, this));//添加ItemizedOverlay实例到mMapView
mMapView.refresh(); // 刷新地图
点击其中一个图标,运行结果如下:
7 弹出窗口图层:PopupOverlay
PopupOverlay用于快速在特定位置显示一个弹窗,代码示例如下:
在显示一个弹窗:
PopupOverlay pop = new PopupOverlay(mMapView,new PopupClickListener() {
@Override
public void onClickedPopup() {
//在此处理点击事件
}
});
//设置弹窗图片,根据自己的图片资源更改
Drawable marker = getResources().getDrawable(R.drawable.pop); //得到需要标在地图上的资源
BitmapDrawable bd = (BitmapDrawable) marker;
Bitmap popbitmap = bd.getBitmap();
GeoPoint ptTAM = new GeoPoint((int)(39.915 * 1E6), (int) (116.404 * 1E6));
//显示弹窗
pop.showPopup(popbitmap, ptTAM , 32);
//隐藏弹窗
pop.hidePop();
8 如何删除覆盖物?
清除指定覆盖物:参考demo里面的ItemizedOverlayDemo.java,重载protected OverlayItemcreateItem(int i)接口,如果要移除覆盖物,就把自己维护的mGeoList列表删除。
清除所有覆盖物:
mapView.getOverlays().clear();
mapView.refresh(); //2.0.0版本起,清除覆盖物后的刷新仅支持refresh方法
分享到:
相关推荐
android studio集成百度地图SDK显示地图
Android 百度地图最新SDK v3.2.0和Android定位SDK:v5.0应用,博客中有详细介绍
百度地图sdk包,版本5.2.1 5_2_1
ArcGIS 开发 SDK for Android
ArcGIS Runtime SDK for Android开发介绍,来自Esri 中国技术人员的培训材料。
百度地图sdk的包,可以直接引入使用,应用于安卓手机软件开发
百度地图 SDK v3.5.0 实现一个具有动画效果的标注覆盖物
该资源是导入了百度地图SDK的Android项目,可正常的使用,作后续的开发
百度地图SDK5.0源码,官网下载,需要的直接下载后按自己的需求添加到自己的项目,直接上源码。
基于百度地图SDK ,实现仿滴滴打车对地图的操作,即标记物Marker(覆盖物)不随地图的移动而移动。包括两部分功能:(1)传入地址比如北京市海淀区五道口地铁站,会在地图上地位,(2)监测到地图移动完成之后,显示...
android 百度地图学习SDK案例
ArcGIS Runtime SDK for Android v1.1发布啦,增强和改进如下: API: 1、从ArcGIS.com上搜索和使用content、users和groups; 2、支持要素定义存储在本地设备上的要素的高级符号化渲染; 3、支持单个应用程序中多个...
天地图 Android SDK v3.01,包含jar包和libs
ArcGIS Rutime SDK for Android 1.0.1正式版离线文档
根据百度地图SDK,实现定位当前设备,并显示在地图上。
包含三个版本: arcgis-android-sdk-v10.2.9 arcgis-runtime-sdk-vandroid-100.0.0 arcgis-runtime-sdk-vandroid-100.1.0
百度地图Android定位SDK为基于移动客户端开发LBS应用提供基础定位能力,它较百度Android 地图SDK而言,专注满足用户获取当前位置与获得地址信息描述功能,软件包体积小。使用Android定位SDK,需先申请key,若你需要...
arcgis runtime sdk for android示例程序,包括地图浏览,标注和查询等功能的实现。
ArcGIS Runtime SDK for Android开发基础,分为上下篇。
安卓 android 百度地图 SDK GPS 位置获取 位置地图显示