关闭

百度地图 雷达/地理编码 功能使用

标签: 地图百度地图android界面ui
339人阅读 评论(0) 收藏 举报
分类:

最近一直在优化软件的bug.. 然后后面可能又要大改.. 所以趁这两天有时间赶紧码两篇博文..=.=

地图功能可以说是现在APP中最常用的功能… 呃.. 之一.. 
不管是电商,社交,o2o,b2c,p2p,锟斤拷,烫烫烫都需要用地图来辅助..

博客里基本的地图实现已经很多了.. 定位(LBS) .. marker(大头针) .. 弹出窗覆盖物(InfoWindow)..等的基础解决方案已经很多.. 如果有从0开始使用百度地图的哥们我建议你先去看我男神洪神写的

Android 百度地图 SDK v3.0.0

注意其中定位的LocationClientOption中 option.setCoorType(“bd09ll”); 是必须要添加的.. 所有的定位都要基于这一TYPE… 不然定位是很不准的.. 相差近一公里.. 至于为什么有偏移=.= 据说是出于国家安全考虑… 我跟您说… 我党可是牛逼了.. 据说啊…咱们的地图位置.. 等会… 我拿个忄

百度地图的API到现在仍然没有太大变化.. 实现基础的功能依然没有问题.. 好了大家去看他写的吧.. 我走了.. 哎哎哎.. 把刀放下!! 都是同行那么暴躁干嘛..

地图雷达

先说官方的解释吧.. 
周边雷达功能,是面向移动端开发者的一套SDK功能接口。同步支持AndroidiOS端。它的本质是一个连接百度LBS开放平台前端SDK产品和后端LBS云的中间服务。 
(。_°☆ ╲ (- – ).. 扯什么犊子呢..

说白了就是能看见周围用同一款软件人的位置.. 而且这个数据由百度维护.. 很大程度降低了服务器的压力.. 不然服务器还要提供数据.. 算用户之间距离什么的.. 这些都可以交给雷达完成..

1. 基本使用

基础的实现其实是非常简单的.. 无非是去取回信息.. 调用雷达就可以取得周围的用户的list.. 然后遍历list获取你想要的用户就行了..

1.首先你需要在你的API控制台注册你的雷达..

注册雷达

2.初始化并注入你的信息

RadarSearchManager mManager = RadarSearchManager.getInstance();//初始化

//设置信息
//周边雷达设置监听
mManager.addNearbyInfoListener(this);
//周边雷达设置用户身份标识,id为空默认是设备标识
mManager.setUserID(userID); //注意ID是一定要设置的.. 而且必须是String类型..如果不设置拿回来的ID是设备号(我也不知道是啥).. 反正跟server上的肯定对不上号..
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

其中你需要让自己的类实现 
RadarSearchListener, RadarUploadInfoCallback

一个是上传完成后的监听.. 一个是检索雷达信息后的回调

3.开始上传

上传分为单次上传和多次上传.. 单次上传了解一下就行了.. 估计没什么公司有这需求.. 就传一次不能保证雷达里有你实时的位置不就没意义了么..

单次上传

//上传位置
RadarUploadInfo info = new RadarUploadInfo();
info.comments = “用户备注信息”;
info.pt = pt; //pt里封装了你的经纬度.. 可以从LBS(百度定位)的回调里获取..
mManager.uploadInfoRequest(info);
然后在RadarUploadInfoCallback重写的方法里对上传后的事件做处理
@Override
public void onGetUploadState(RadarSearchError error) {
    // TODO Auto-generated method stub
    if (error == RadarSearchError.RADAR_NO_ERROR) {
        //上传成功
        Toast.makeText(RadarDemo.this, "单次上传位置成功", Toast.LENGTH_LONG)
                .show();
    } else {
        //上传失败
        Toast.makeText(RadarDemo.this, "单次上传位置失败", Toast.LENGTH_LONG)
                .show();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

定时重复上传

//设置自动上传的callback和时间间隔(单位毫秒)
mManager.startUploadAuto(this, 5000);
//实现上传callback,自动上传 
//自动上传这里直接在接口里设置好就行了... pt的经纬度数据可以由OnLocationListener里动态的去修改提供
@Override
public RadarUploadInfo OnUploadInfoCallback() {
    // TODO Auto-generated method stub
    RadarUploadInfo info = new RadarUploadInfo();
    info.comments = “用户备注信息”;
    info.pt = pt;
    return info;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

这样数据就能实时上传了 ..

4.取回信息

有存当然有取.. 取的方法其实很简单… 但是此处有元古巨坑.. 后面会讲到及处理方法.. 
先看文档里的做法..

//构造请求参数,其中centerPt是自己的位置坐标
RadarNearbySearchOption option = new RadarNearbySearchOption()
.centerPt(pt)//中心点
.pageNum(pageIndex) //页码...? 这是啥 此处大坑
.radius(2000); //半径.. 不用说了
//发起查询请求
mManager.nearbyInfoRequest(option);
@Override
public void onGetNearbyInfoList(RadarNearbyResult result,
        RadarSearchError error) {
    // TODO Auto-generated method stub
    if (error == RadarSearchError.RADAR_NO_ERROR) {
        Toast.makeText(RadarDemo.this, "查询周边成功", Toast.LENGTH_LONG)
            .show();
        //获取成功,处理数据
    } else {
        //获取失败
        Toast.makeText(RadarDemo.this, "查询周边失败", Toast.LENGTH_LONG)
            .show();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

你会很开心的发现回调中result里有个list.. 拿出来看一下变量.. list里的对象有userID.. 有pt.. 在测试时可能就天真得以为已经大功告成了.. 实际上= =; 我很抱歉..

5.打完收工

先把流程说完.. 最后需要打完收工..

//移除监听
mManager.removeNearbyInfoListener(this);
//清除用户信息
//如果你希望雷达里保留用户最后的位置.. 可以不做这一步..
mManager.clearUserInfo();
//释放资源
mManager.destroy();
mManager = null;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

至此.. 官方给出的文档流程已经走完了.. 然后就可以用了.. 如果你结合了marker的话就已经可以看到周围同事的位置了.. 然后性♂奋的拿着成品去给产品经理.. 期望升职加薪.. 出任总经理当上CEO迎娶白富美.. 
( ̄ε(# ̄)☆╰╮( ̄▽ ̄///) 憋做梦了..

2. 元古巨坑

百度很不厚道的一点就是在上述第四步上遗漏了解释… 实际上.. 取回list是分页的.. 
其实讲道理来说这样做是合理的.. 不然一下几万条数据直接取回来…万一炸了怎么办… 所以可以根据需求去取..

但是问题又来了.. 分页咋分的.. 最大页码在哪.. 一页有几条?

实际上这里还需要继续添加参数..

 //构造请求参数,其中centerPt是自己的位置坐标
RadarNearbySearchOption option = new RadarNearbySearchOption()
.centerPt(pt)//中心点
.pageNum(pageIndex) //页码...? 这是啥 此处大坑
.radius(2000); //半径.. 不用说了
.pageCapacity(50) //一页容量(1号坑:而且经过亲测.. 一页容量最大为50 .. 如果你写了>50的容量的话.. 他就按默认容量10取回了.. 坑的不行)
.sortType(RadarNearbySearchSortType.distance_from_far_to_near) //排序类型.. 按距离和按最后上传时间排序都行.. 
2号坑:而且在我用的百度地图v4.0.0里这个参数是有问题的... distance_from_far_to_near反而是由近及远.. distance_from_near_to_far是由远及近.. 反过来了.. 所以使用起来非常要注意
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

妈呀.. 你有隐藏属性就算了… 隐藏属性还自带混淆技能的啊… 可怕.. 所以用起来要倍加小心..

当然这才取回了第一页.. 
你要在回调中..

@Override
    public void onGetNearbyInfoList(RadarNearbyResult radarNearbyResult, RadarSearchError radarSearchError) {

        if (radarSearchError == RadarSearchError.RADAR_NO_ERROR) {
            if (radarNearbyResult.pageIndex < radarNearbyResult.pageNum -1 ) {//如果当前页码还没到最后一页的话
                radarInfos.addAll(radarNearbyResult.infoList);//数据保存起来

                option.pageNum(radarNearbyResult.pageIndex + 1);//页码加一

                mManager.nearbyInfoRequest(option);//再次发起请求




            } else { //如果已经达到最后一页
                radarInfos.addAll(radarNearbyResult.infoList);//保存数据
                addInfosOverlay(radarInfos);// 添加图层

            }

        } else {//如果获取失败
            mManager.nearbyInfoRequest(option);//重新去获取当前页数据



        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

经过这样一搞.. bug总算是修复了.. 终于不会因为用户多过十个就看不到人了.. 不过重复请求几十次(2000人的话) .. 这样是很卡的.. 那只能用progressbar让用户等等了.. 毕竟数据不是我们自己维护的.. 没办法啊TAT

至此百度地图雷达功能算是完善了.. 然而我被经理骂了一顿… 你看看人家IOS怎么没bug… 妈呀TAT IOS真是一下取回几万条的么… IOS的哥们都不知道有分页这回事毛事没有哎…

地理编码

地理编码功能分为正向编码和反向编码.. 说白了.. 就是你要拿地址查坐标还是拿坐标查地址..

正向地理编码官网上已经写得很清楚了.. 也没啥问题.. 参考

地理编码

而反向地理编码的使用也是大同小异.. 只需要在


geoCoder.reverseGeoCode(new ReverseGeoCodeOption().location(new LatLng(latitude, longtitude))); //把经纬度传进去开始查找

OnGetGeoCoderResultListener listener = new OnGetGeoCoderResultListener() {  
    public void onGetGeoCodeResult(GeoCodeResult result) {  
        if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {  
            //没有检索到结果  
        }  else {
            Toast.showToast(getActivity(),result.getAddress()); //把地址吐司出来
            //获取地理编码结果  你就可以做爱做的事情了=.= 嘿嘿嘿 
        }

    }  

    @Override  
    public void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) {  
        if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {  
            //没有找到检索结果  
        }  
        //获取反向地理编码结果  
    }  
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

地理编码的使用还是很简单的…

效果图

0
0
查看评论

百度地图 雷达/地理编码 功能使用

百度地图使用很广泛.. 可是很少有人介绍雷达呢=.=
  • Jupiterxx
  • Jupiterxx
  • 2016-11-17 23:35
  • 612

实现百度地图的身边雷达的功能效果

一、概述        百度地图现在在不断滴做很多的各种功能,可能是面向客户的开发,所以在不断开发出新颖的功能,以取得更多的用户。最近出了一个“身边雷达”的新的功能。感觉十分的酷炫。不去评论这个功能是谁先开发出来的(快播)。既然好看,就试着动手做一个了。直接也...
  • vaecer
  • vaecer
  • 2014-03-17 15:35
  • 2965

Swift - 集成百度地图的周边雷达功能(附样例)

一、周边雷达功能介绍 1,什么是周边雷达 (1)周边雷达功能,是面向移动端开发者的一套 SDK 功能接口(同步支持 Android 和 iOS 端)。 (2)周边雷达本质是一个连接百度 LBS 开放平台前端&#...
  • mo_xiao_mo
  • mo_xiao_mo
  • 2016-09-21 10:48
  • 1297

百度地图 雷达/地理编码

百度地图 雷达/地理编码 功能使用 标签: 百度地图sdkandroid周边雷达地理编码 2016-11-17 23:35 295人阅读 评论(0) 收藏 举报  分类: Android(3) &#...
  • w690333243
  • w690333243
  • 2017-08-28 08:24
  • 198

百度地图之地理位置和反地理编码搜索

研究了好几天百度地图了,终于在今天吧经常用到的都结尾了,最后一篇关于百度地图的博文,根据地理位置和反地理编码搜索。 尽管以前做过百度地图的搜索,但是没有深入研究,发现需要填写城市和地址两个地方才能完成搜索,好坑爹,找了好多,都没有说明到底怎么搜索,估计又是骗浏览量的人各种copy代码来的吧,唉......
  • sinat_29874521
  • sinat_29874521
  • 2016-09-23 16:31
  • 1062

Android 百度地图周边雷达(v6.1.3)及覆盖物

闲聊百度地图SDK 百度地图API是为开发者免费提供的一套基于百度地图服务的应用接口,包括JavaScript API、Web服务API、Android SDK、iOS SDK、定位SDK、车联网API、LBS云等多种开发工具与服务,提供基本地图展现、搜索、定位、逆/地理编码、路线规划、LBS云...
  • qq_17250009
  • qq_17250009
  • 2016-03-21 16:24
  • 3980

iOS 开发 百度地图 逆地理编码

对于APP来说,绝大多数需要用的就是定位后进行逆地理编码,获取城市,获取位置。 不得不说,百度LBS的逆地理编码这一块,是不是搞出来点不好的东西。 要做百度地图的逆地理编码功能,首先要启动百度服务,这个不详细说了,可以看我上一篇博文,我直接说逆地理编码。 上代码 //初始化地理编码类 ...
  • wjchao1990
  • wjchao1990
  • 2016-06-21 15:25
  • 1746

调用百度地图API进行地理编码和反地理编码(二)——批量处理

在(一)中主要介绍了单个数据的处理,后来又请教了于斐老师关于批量处理的操作,请于老师帮忙做了一个批量处理的。                           &#...
  • wangshengan
  • wangshengan
  • 2015-04-02 10:12
  • 1512

百度地图的使用定位,逆地理编码,自定义不同类型的大头针

原先地图一直用高德的,但是在开发项目中 发现自定义大头针的时候高德会自动调整比例尺进行更适合的观看角度。我们的项目中是允许的,所以 临时更换了百度地图,在使用时用到了很多问题,记一下,以便以后使用 1.百度地图的配置  地图将所有的功能分为不同的包,根据需求进行下载不同的包,这点避免了...
  • xiuaoxiaoqigui
  • xiuaoxiaoqigui
  • 2016-06-16 10:34
  • 804

百度地图----地理编码与反地理编码

百度地图—-地理编码与反地理编码 ONE Goal,ONE Passion ! 地理编码:地理编码—-就是将我们熟悉的地址解析为经纬度.如: 地址 LatLng(坐标) 郑州 34.7568711, 113.663221 好了,代码很简单呢 //新建编码查询对象 Geo...
  • fengltxx
  • fengltxx
  • 2016-01-21 08:27
  • 6312
    个人资料
    • 访问:6353次
    • 积分:130
    • 等级:
    • 排名:千里之外
    • 原创:5篇
    • 转载:12篇
    • 译文:0篇
    • 评论:0条