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

闲聊百度地图SDK

百度地图API是为开发者免费提供的一套基于百度地图服务的应用接口,包括JavaScript API、Web服务API、Android SDK、iOS SDK、定位SDK、车联网API、LBS云等多种开发工具与服务,提供基本地图展现、搜索、定位、逆/地理编码、路线规划、LBS云存储与检索等功能,适用于PC端、移动端、服务器等多种设备,多种操作系统下的地图应用开发。百度地图已经容纳了超过500万生活服务类数据,60余家数据合作伙伴与之进行深度合作,日均定位请求超过35亿次。

很久以前接入过百度地图SDK。自v3.6.0起,版本更新大到新旧不兼容。故在此重温百度地图SDK。

  1. 注册百度账号:https://passport.baidu.com/v2/?reg&tpl=newdev&u=http://developer.baidu.com/
  2. 创建应用:http://lbsyun.baidu.com/apiconsole/key#
  3. 下载相应SDK:http://lbsyun.baidu.com/index.php?title=androidsdk/sdkandev-download
  4. 开发文档:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/introduction

周边雷达概述

  1. 什么是周边雷达功能?
    周边雷达功能,是面向移动端开发者的一套SDK功能接口。同步支持Android和iOS端。它的本质是一个连接百度LBS开放平台前端SDK产品和后端LBS云的中间服务。
  2. 利用周边雷达能够实现什么?
    开发者利用周边雷达功能,可以便捷的在自己的应用内,帮助用户实现查找周边跟“我”使同样一款App的人,这样一个功能。
  3. 周边雷达功能的典型使用场景
    (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的博文,综合使用可以实现更多效果:

  1. 我的博客
  2. Android 百度定位SDK(v6.1.3)结合方向传感器
  3. Android 百度鹰眼轨迹SDK(v2.1.6)

Demo全部代码及资源下载:http://download.csdn.net/detail/qq_17250009/9469613

时间: 2024-09-10 07:19:41

Android 百度地图周边雷达(v6.1.3)及覆盖物的相关文章

Android百度地图定位后获取周边位置的实现代码

本文实例讲解Android百度地图定位后获取周边位置的实现代码,分享给大家供大家参考,具体内容如下 效果图: 具体代码: 1.布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical&q

Android百度地图应用之创建显示地图_Android

本文是在完成了Android百度地图应用开发基础知识的基础上继续实现的. 本文实例为大家分享了Android如何显示地图,并为后续内容做准备,供大家参考,具体内容如下  1.运行效果  本章共有25个示例,在x86模拟器中运行的效果如下:   下面介绍主要设计步骤.  2.添加资源 (1)drawable-hdpi  Resources/ drawable-hdpi下的文件:将下载的示例对应文件夹下的文件全部拖放到该文件夹下,并将所有[生成操作]属性全部设置为"AndroidResource&q

[android] 百度地图开发 (三).定位当前位置及getLastKnownLocation获取location总为空问题

       前一篇百度地图开发讲述"(二).定位城市位置和城市POI搜索",主要通过监听对象MKSearchListener类实现城市兴趣点POI(Point of Interest)搜索.该篇讲述定位当前自己的位置及使用getLastKnownLocation获取location总时为空值的问题. 一. 定位当前位置的原理及实现       定位当前位置可以通过LBS(Location Based Service,基于位置的服务),主要工作原理是利用无线网络Network或GPS定

Android 百度地图POI搜索功能实例代码_Android

在没介绍正文之前先给大家说下poi是什么意思. 由于工作的关系,经常在文件中会看到POI这三个字母的缩写,但是一直对POI的概念和含义没有很详细的去研究其背后代表的意思.今天下班之前,又看到了POI这三个字母,决定认认真真的搜索一些POI具体的含义. POI是英文的缩写,原来的单词是point of interest, 直译成中文就是兴趣点的意思.兴趣点这个词最早来自于导航地图厂商.地图厂商为了提供尽可能多的位置信息,花费了很大的精力去寻找诸如加油站,餐馆,酒店,景点等目的地,这些目的地其实都可

Android 百度地图POI搜索功能实例代码

在没介绍正文之前先给大家说下poi是什么意思. 由于工作的关系,经常在文件中会看到POI这三个字母的缩写,但是一直对POI的概念和含义没有很详细的去研究其背后代表的意思.今天下班之前,又看到了POI这三个字母,决定认认真真的搜索一些POI具体的含义. POI是英文的缩写,原来的单词是point of interest, 直译成中文就是兴趣点的意思.兴趣点这个词最早来自于导航地图厂商.地图厂商为了提供尽可能多的位置信息,花费了很大的精力去寻找诸如加油站,餐馆,酒店,景点等目的地,这些目的地其实都可

android百度地图有提供路线选择功能吗

问题描述 android百度地图有提供路线选择功能吗 android百度地图有提供路线选择功能吗?和百度地图一样输入起始点,驾车方式,从若干条路线中选择一条路线 解决方案 你搜索后是会返回给你多条路线的

[android] 百度地图开发 (一).申请AK显示地图及解决显示空白网格问题

    最近做android百度地图,但是使用baidumapapi_v2_3_1.jar和libBaiduMapSDK_v2_3_1.so显示百度地图时总是遇到问题--只显示网格而没有显示地图,网络连接和APIKey申请都是正确的,就是不知道为什么不能显示,网上也有很多人遇到这个问题,有的是SDK更新不兼容.而且网上很多百度地图都是使用V2.3.1版本,后来没有办法只有通过baidumapapi_v2_4_1.jar完成显示地图.    其中需要注意的是使用2.3.1时调用manager.in

Android百度地图自定义公交路线导航_Android

一.问题描述 基于百度地图实现检索指定城市指定公交的交通路线图,效果如图所示 二.通用组件Application类,主要创建并初始化BMapManager public class App extends Application { static App mDemoApp; //百度MapAPI的管理类 public BMapManager mBMapMan = null; // 授权Key // 申请地址:http://dev.baidu.com/wiki/static/imap/key/ p

android百度地图api 的一些类我用不了。可是官方api中明明有给出。

问题描述 android百度地图api 的一些类我用不了.可是官方api中明明有给出. 还有关于overlaymanager的类 我都用不了.可是官网api明明给出了这个类的啊.我下载了最全的sdk. 希望有人帮我下 感激不尽.文档"> //官方api的部分截图 解决方案 Android 百度地图API 定位 导航Android 百度地图API 定位 导航 代码 解决方案二: 有这个jar包吗..... 解决方案三: 所用百度地图API为3.6版,而BMapManager在3之后就弃用了,