Android 百度地图周边雷达(v6.1.3)及覆盖物
2016-03-21 16:24
295 查看
闲聊百度地图SDK
百度地图API是为开发者免费提供的一套基于百度地图服务的应用接口,包括JavaScript API、Web服务API、Android SDK、iOS SDK、定位SDK、车联网API、LBS云等多种开发工具与服务,提供基本地图展现、搜索、定位、逆/地理编码、路线规划、LBS云存储与检索等功能,适用于PC端、移动端、服务器等多种设备,多种操作系统下的地图应用开发。百度地图已经容纳了超过500万生活服务类数据,60余家数据合作伙伴与之进行深度合作,日均定位请求超过35亿次。很久以前接入过百度地图SDK。自v3.6.0起,版本更新大到新旧不兼容。故在此重温百度地图SDK。
注册百度账号:https://passport.baidu.com/v2/?reg&tpl=newdev&u=http://developer.baidu.com/
创建应用:http://lbsyun.baidu.com/apiconsole/key#
下载相应SDK:http://lbsyun.baidu.com/index.php?title=androidsdk/sdkandev-download
开发文档:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/introduction
周边雷达概述
什么是周边雷达功能?周边雷达功能,是面向移动端开发者的一套SDK功能接口。同步支持Android和iOS端。它的本质是一个连接百度LBS开放平台前端SDK产品和后端LBS云的中间服务。
利用周边雷达能够实现什么?
开发者利用周边雷达功能,可以便捷的在自己的应用内,帮助用户实现查找周边跟“我”使同样一款App的人,这样一个功能。
周边雷达功能的典型使用场景
(1)查看周边都有谁跟“我”使用同一个App,分布在哪里?
(2)查看周边用户在听什么歌、看什么文章、有什么新动态?
(3)查看周边有什么最新发生的新闻、资讯?
周边雷达开发介绍:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/radar
注意:一定要新建我的周边雷达,否则无法使用。http://lbsyun.baidu.com/index.php?title=radar
从一个包含基础地图的示例开始
package com.dyk.baidumapwork; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Toast; import com.baidu.mapapi.SDKInitializer; import com.baidu.mapapi.map.BaiduMap; import com.baidu.mapapi.map.BitmapDescriptor; import com.baidu.mapapi.map.BitmapDescriptorFactory; import com.baidu.mapapi.map.GroundOverlayOptions; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.Marker; import com.baidu.mapapi.map.MarkerOptions; import com.baidu.mapapi.map.OverlayOptions; import com.baidu.mapapi.map.PolygonOptions; import com.baidu.mapapi.map.Stroke; import com.baidu.mapapi.map.TextOptions; import com.baidu.mapapi.model.LatLng; import com.baidu.mapapi.model.LatLngBounds; import com.baidu.mapapi.radar.RadarNearbyResult; import com.baidu.mapapi.radar.RadarNearbySearchOption; import com.baidu.mapapi.radar.RadarSearchError; import com.baidu.mapapi.radar.RadarSearchListener; import com.baidu.mapapi.radar.RadarSearchManager; import com.baidu.mapapi.radar.RadarUploadInfo; import java.util.ArrayList; import java.util.List; public class MainActivity extends Activity implements View.OnClickListener,RadarSearchListener { private static final String TAG = "MainActivity"; private MapView mMapView; private BaiduMap mBaiduMap; private Marker markerA; private RadarSearchManager mManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //在使用SDK各组件之前初始化context信息,传入ApplicationContext //注意该方法要再setContentView方法之前实现 SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main); // 初始化周边雷达 mManager = RadarSearchManager.getInstance(); initView(); initClick(); // testOverlay(); // testGeometryOverlay(); // testTextOverlay(); // testGroundOverlay(); // 将底图标注设置为隐藏,方法如下: // mBaiduMap.showMapPoi(false); } private void initView() { mMapView = (MapView) findViewById(R.id.bmapView); mBaiduMap = mMapView.getMap(); } private void initClick() { findViewById(R.id.map_common).setOnClickListener(this); findViewById(R.id.map_satelite).setOnClickListener(this); findViewById(R.id.map_blank).setOnClickListener(this); findViewById(R.id.map_traffic).setOnClickListener(this); findViewById(R.id.map_heat).setOnClickListener(this); findViewById(R.id.map_radar).setOnClickListener(this); } /** 覆盖物 */ private void testOverlay() { LatLng point = new LatLng(39.963175, 116.400244); // 通过marker的icons设置一组图片,再通过period设置多少帧刷新一次图片资源 ArrayList<BitmapDescriptor> bitmapList = new ArrayList<BitmapDescriptor>(); BitmapDescriptor bitmapA = BitmapDescriptorFactory.fromResource(R.drawable.icon_marka); BitmapDescriptor bitmapB = BitmapDescriptorFactory.fromResource(R.drawable.icon_markb); BitmapDescriptor bitmapC = BitmapDescriptorFactory.fromResource(R.drawable.icon_markc); BitmapDescriptor bitmapD = BitmapDescriptorFactory.fromResource(R.drawable.icon_markd); BitmapDescriptor bitmapE = BitmapDescriptorFactory.fromResource(R.drawable.icon_marke); bitmapList.add(bitmapA); bitmapList.add(bitmapB); bitmapList.add(bitmapC); bitmapList.add(bitmapD); bitmapList.add(bitmapE); OverlayOptions options = new MarkerOptions() .position(point) //位置 .icons(bitmapList) // 图标 .period(10) // 刷新帧数 .zIndex(9)// 显示层级 .alpha(0.5f) //透明度 .draggable(true);// 支持拖拽 markerA = (Marker) (mBaiduMap.addOverlay(options));// 在地图上添加marker并显示 // 点击marker mBaiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() { @Override public boolean onMarkerClick(Marker marker) { marker.remove(); return true; } }); } /** 几何覆盖物 */ private void testGeometryOverlay() { //定义多边形的五个顶点 LatLng pt1 = new LatLng(39.93923, 116.357428); LatLng pt2 = new LatLng(39.91923, 116.327428); LatLng pt3 = new LatLng(39.89923, 116.347428); LatLng pt4 = new LatLng(39.89923, 116.367428); LatLng pt5 = new LatLng(39.91923, 116.387428); List<LatLng> pts = new ArrayList<LatLng>(); pts.add(pt1); pts.add(pt2); pts.add(pt3); pts.add(pt4); pts.add(pt5); //构建用户绘制多边形的Option对象 OverlayOptions polygonOption = new PolygonOptions() .points(pts) .stroke(new Stroke(5, 0xAA00FF00)) .fillColor(0xAAFFFF00); //在地图上添加多边形Option,用于显示 mBaiduMap.addOverlay(polygonOption); } /** 文字覆盖物 */ private void testTextOverlay() { LatLng text = new LatLng(39.86923, 116.397428); OverlayOptions options = new TextOptions() .bgColor(0xAAFFFF00) .fontSize(24) .fontColor(0xFFFF00FF) .text("文字覆盖物测试") .rotate(-45) // 旋转角度 .position(text); mBaiduMap.addOverlay(options); } /** 地形图图层(GroundOverlay),又可叫做图片图层 */ private void testGroundOverlay() { //定义Ground的显示地理范围 LatLng southwest = new LatLng(39.92235, 116.380338); LatLng northeast = new LatLng(39.947246, 116.414977); LatLngBounds bounds = new LatLngBounds.Builder() .include(northeast) .include(southwest) .build(); //定义Ground显示的图片 BitmapDescriptor bdGround = BitmapDescriptorFactory .fromResource(R.drawable.ground_overlay); //定义Ground覆盖物选项 OverlayOptions ooGround = new GroundOverlayOptions() .positionFromBounds(bounds) .image(bdGround) .transparency(0.8f);// 透明度 //在地图中添加Ground覆盖物 mBaiduMap.addOverlay(ooGround); } /** 周边雷达信息上传 */ private void testRadarInfoUpload() { // 周边雷达设置监听 mManager.addNearbyInfoListener(this); //周边雷达设置用户身份标识,id为空默认是设备标识 mManager.setUserID("123"); //上传位置 RadarUploadInfo info = new RadarUploadInfo(); LatLng pt = new LatLng(39.963175, 116.400244); info.comments = "备注"; info.pt = pt; mManager.uploadInfoRequest(info); } /** 雷达周边位置检索 */ private void testRadarLocationSearch() { // 自己的位置 LatLng pt = new LatLng(39.963175, 116.400244); RadarNearbySearchOption option = new RadarNearbySearchOption() .centerPt(pt) .pageNum(0) .radius(2*1000); // 发起查询请求 mManager.nearbyInfoRequest(option); } @Override protected void onResume() { super.onResume(); //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理 mMapView.onResume(); } @Override protected void onPause() { super.onPause(); //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理 mMapView.onPause(); } @Override protected void onDestroy() { super.onDestroy(); //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理 mMapView.onDestroy(); //移除监听 mManager.removeNearbyInfoListener(this); //清除用户信息 // mManager.clearUserInfo(); //释放资源 mManager.destroy(); mManager = null; } @Override public void onClick(View v) { switch (v.getId()) { // 普通地图 case R.id.map_common: mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); break; // 卫星地图 case R.id.map_satelite: mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE); break; // 空白地图 case R.id.map_blank: mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NONE); break; // 交通图 case R.id.map_traffic: if (mBaiduMap.isTrafficEnabled()) { mBaiduMap.setTrafficEnabled(false); } else { mBaiduMap.setTrafficEnabled(true); } break; // 热力图 case R.id.map_heat: if (mBaiduMap.isBaiduHeatMapEnabled()) { mBaiduMap.setBaiduHeatMapEnabled(false); } else { mBaiduMap.setBaiduHeatMapEnabled(true); } break; // 周边检索 case R.id.map_radar: testRadarInfoUpload(); testRadarLocationSearch(); break; } } @Override public void onGetNearbyInfoList(RadarNearbyResult radarNearbyResult, RadarSearchError radarSearchError) { if (radarSearchError == RadarSearchError.RADAR_NO_ERROR) { Toast.makeText(MainActivity.this, "查询周边成功", Toast.LENGTH_LONG).show(); Log.i(TAG,radarNearbyResult.infoList.get(0).userID+"\n"+ radarNearbyResult.infoList.get(0).distance+"\n"+ radarNearbyResult.infoList.get(0).pt+"\n"+ radarNearbyResult.infoList.get(0).timeStamp); } else { Toast.makeText(MainActivity.this, "查询周边失败", Toast.LENGTH_LONG).show(); Log.i(TAG,"查询错误:"+radarSearchError.toString()); } } @Override public void onGetUploadState(RadarSearchError radarSearchError) { if (radarSearchError == RadarSearchError.RADAR_NO_ERROR) { //上传成功 Toast.makeText(MainActivity.this, "单次上传位置成功", Toast.LENGTH_LONG).show(); } else { //上传失败 Toast.makeText(MainActivity.this, "单次上传位置失败", Toast.LENGTH_LONG).show(); Log.i(TAG,"上传错误:"+radarSearchError.toString()); } } @Override public void onGetClearInfoState(RadarSearchError radarSearchError) { if (radarSearchError == RadarSearchError.RADAR_NO_ERROR) { //清除成功 Toast.makeText(MainActivity.this, "清除位置成功", Toast.LENGTH_LONG).show(); } else { //清除失败 Toast.makeText(MainActivity.this, "清除位置失败", Toast.LENGTH_LONG).show(); } } }
这是一段运行成功的代码,可作为实际开发的参考。
注意:
1.必须要新建我的雷达
2.pageNum从0开始
3.软件要模仿两个用户分别运行一次,对应的操作为:跑一遍程序之后修改userId后在跑一遍。这样才能看见“附近的人”。
4.在合适的时机调用RadarSearchManager#clearUserInfo(),别不小心把自己测试数据给clear了,否则肯定没有数据的啦!
欢迎访问我的博客及另外两篇关于百度地图SDK的博文,综合使用可以实现更多效果:
我的博客
Android 百度定位SDK(v6.1.3)结合方向传感器
Android 百度鹰眼轨迹SDK(v2.1.6)
Demo全部代码及资源下载:http://download.csdn.net/detail/qq_17250009/9469613
相关文章推荐
- Android在锁屏状态下启动界面
- Android图片加载Glide框架使用详解
- 一张图片占多大内存的计算-android
- Android下的Activity的四种启动模式
- Error:Cause: org/gradle/api/publication/maven/internal/DefaultMavenFactory Android
- Android内存泄露的问题
- 电脑上用adb连接到Android设备(开发板也可)
- Android 获取手机号
- Android Design Support Library使用详解
- Android Studio 导入Github项目错误解决
- android开发中使不同的listview同时联动
- Android MVP模式初体验
- android.intent.action.SCREEN_ON与android.intent.action.SCREEN_OFF
- Android悬浮窗进阶版-下篇(福利篇)
- android mediaplayer相关
- Android Studio 生成 JavaDoc 空指针异常|文档编码出错|内存溢出
- Android 系统状态参数和开机服务状态
- Android多线程异步处理:AsyncTask 的实现原理
- 在android开发中调用Geocoder方法返回空值的问题
- The following classes could not be instantiated: - android.support.v7.widget.Toolbar 解决办法