上一篇信息我们讲到了关于定位的使用,这篇信息我们继续高德地图的知识——地理围栏的使用

“地理围栏”顾名思义就是设置一个指定的区域,当定位点进入地理围栏边界、地理围栏内、跳出地理围栏、进行的一系列事件触发。

1、首先我们需要先进行地理围栏的初始化:

① 先初始化参数

/*** 地理围栏客户端相关*/
private GeoFenceClient fenceClient = null;
private static final String GEOFENCE_BROADCAST_ACTION = "***.***.geofence.round";
List<GeoFence> fenceList = new ArrayList<>(); //保存添加成功的地理围栏的点

②初始化地理围栏

/*** @description 初始化地理围栏客户端*/
private void initFenceClient() {fenceClient = new GeoFenceClient(getApplicationContext());IntentFilter filter = new IntentFilter();filter.addAction(GEOFENCE_BROADCAST_ACTION);registerReceiver(mGeoFenceReceiver, filter); //注册广播事件//创建pendingIntentfenceClient.createPendingIntent(GEOFENCE_BROADCAST_ACTION);fenceClient.setGeoFenceListener(this); //地理围栏的监听事件/*** 设置地理围栏的触发行为,默认为进入GeoFenceClient.GEOFENCE_IN* GeoFenceClient.GEOFENCE_OUT 出地理围栏*GeoFenceClient.GEOFENCE_STAYED 停留*/fenceClient.setActivateAction(GeoFenceClient.GEOFENCE_IN);
}

③ 添加地理围栏,根据自己的业务需要调用此方法添加地理围栏

/*** 添加圆形围栏*/
private void addRoundFence(double latitude, double longitude, Double radio, String customId) {DPoint centerPoint = new DPoint(latitude, longitude);//修改地理围栏的触发半径fenceClient.addGeoFence(centerPoint, radio == null ? null : radio.floatValue(), customId);
}

④ 实现地理围栏监听方法

@Override
public void onGeoFenceCreateFinished(List<GeoFence> geoFenceList, int errorCode, String s) {LoggerManager.e("电子围栏", "创建电子围栏成功" + s);if (errorCode == GeoFence.ADDGEOFENCE_SUCCESS) {fenceList.addAll(geoFenceList); //将创建成功的地理围栏添加进入集合}
}

⑤ 实现初始化传入的广播接收器,对地理围栏的状态进行监听,可根据自己的业务需求进行修改状态回调

/*** 接收触发围栏后的广播,当添加围栏成功之后,会立即对所有围栏状态进行一次侦测,如果当前状态与用户设置的触发行为相符将会立即触发一次围栏广播;* 只有当触发围栏之后才会收到广播,对于同一触发行为只会发送一次广播不会重复发送,除非位置和围栏的关系再次发生了改变。*/
private BroadcastReceiver mGeoFenceReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {// 接收广播if (Objects.requireNonNull(intent.getAction()).equals(GEOFENCE_BROADCAST_ACTION)) {Bundle bundle = intent.getExtras();String customId = bundle != null ? bundle.getString(GeoFence.BUNDLE_KEY_CUSTOMID) : "";String fenceId = bundle != null ? bundle.getString(GeoFence.BUNDLE_KEY_FENCEID) : "";//status标识的是当前的围栏状态,不是围栏行为int status = bundle != null ? bundle.getInt(GeoFence.BUNDLE_KEY_FENCESTATUS) : GeoFence.STATUS_UNKNOWN;switch (status) {case GeoFence.STATUS_LOCFAIL://("围栏定位失败");break;case GeoFence.STATUS_IN://"进入围栏"+customId//ToastUtil.show("触发景点id:"+customId+"是否已经触发"+enterMap.get(customId));break;case GeoFence.STATUS_OUT://("离开围栏");break;case GeoFence.STATUS_STAYED://("停留在围栏内");break;default:break;}}}
};

⑥ 结束使用之后进行事件处理,注销广播事件、移除地理围栏

@Override
protected void onDestroy() {super.onDestroy();try {unregisterReceiver(mGeoFenceReceiver);} catch (Throwable e) {LoggerManager.e(e.toString());}if (null != fenceClient) {fenceClient.removeGeoFence();}
}

关于高德地图问题总结 (二)地理围栏的使用相关推荐

  1. android 谷歌地图围栏,如何在谷歌地图与c做地理围栏#

    我已经创建了基本的地理围栏,我在该地图中添加了2个标记和一个圆圈.我试图显示标记是否出现在圆圈标记上应该以不同的颜色显示,以便我们可以了解物体是否出于地理围栏.如何改变标记的颜色或在标记超出圆圈时显示 ...

  2. Flutter百度地图定位插件与地理围栏插件冲突问题

    我在开发app签到功能时使用了百度地图sdk,我的需求是需要定位当期那位置并在当前位置限定范围距离内的位置才可以打卡,并且要在地图上进行展示.所以也就需要同时用到定位组件LocationFlutter ...

  3. 项目 - Web地图开发【高德地图API】(二)

    导航兔: Web地图开发 [高德地图API] 导航地址 Web地图开发[高德地图API](一) https://qianmoer.blog.csdn.net/article/details/12842 ...

  4. vue使用高德地图画电子围栏_地理围栏-辅助功能-开发指南-iOS 定位SDK | 高德地图API...

    以下内容自 iOS 定位SDK V2.3.0 后支持. 第 1 步,引入头文件 在调用地理围栏功能的类中引入AMapFoundationKit.h和AMapLocationKit.h这两个头文件,注意 ...

  5. 技巧 | 在R语言中使用高德地图的API进行地理/逆地理编码(地址与经纬度的相互转换)...

    高德地图和百度地图都提供了坐标拾取系统,通过坐标查询或坐标反查操作可以查询一个地址对应的经纬度或经纬度对应的地址名称.但是,手动查询的方式效率很低,也不能进行批量查询. 本篇就来介绍在R语言中调用高德 ...

  6. 高德地图 SDK集成 定位 地理编码 搜索 经纬度获取 功能工具类

    最近项目要集成高德地图,然后可以根据语音输入指令,进行定位和地理编码搜索功能,从而实现获取当前位置经纬度和根据地址获取经纬度的功能 下载文件之只放了libs和主要代码文件 https://downlo ...

  7. 高德地图-web端根据地理编码和逆地理编码

    首先,用地址生成器快速生成一张地图,网址为lbs.amap.com/console/show/tools: <!DOCTYPE html> <html> <head> ...

  8. 【面经】高德地图 C++ 研发 二面

    点击上方蓝字关注我,我们一起学编程 如果觉得内容还不错,请帮忙分享一下 有任何疑问或者想看的内容,欢迎私信 微信搜索<编程笔记本>(codingbook2020),获取更多干活. 今天接着 ...

  9. 高德地图API开发二三事(一)如何判断点是否在折线上及引申思考

    最近使用高德地图 JavaScript API 开发地图应用,提炼了不少心得,故写点博文,做个系列总结一下,希望能帮助到LBS开发同胞们. 项目客户端使用高德地图 JavaScript API,主要业 ...

  10. 高德地图API学习二、获取定位数据

    ***首先需要到高德官方中申请key!!! 一.配置AndroidManifest.xml 首先,声明Service组件 <service android:name="com.amap ...

最新文章

  1. Java -- JDBC 学习--通过 ResultSet 执行查询操作
  2. 百度搜索自动提示搜索相关内容----模拟实现
  3. 判断listview是上滑还是下滑的方法
  4. Fast R-CNN整体把握
  5. 正则表达式的运算符优先级
  6. CMU Deep Learning 2018 by Bhiksha Raj 学习记录(8)
  7. php function函数用法,js的function函数是什么?js中function的用法
  8. 病毒及攻击防御手册之八
  9. AOP与自定义注解与反射
  10. IMX8mp alsa音频调试
  11. 精英二代手柄测试软件,微软精英手柄2代评测 继续引领行业标准
  12. linux把m4s格式转换mp4,video - ffmpeg将m4s转换为mp4 - SO中文参考 - www.soinside.com
  13. 【修真院PM小课堂】轮播图有几种表现形式,适合什么场景, 有哪些切换方式?
  14. 洛谷 P5520 青原樱(组合数学插板法 or 插空法 模板)
  15. 我的世界java版钻石剑附魔_我的世界钻石剑怎么附魔 钻石剑附魔100级指令
  16. 基于OpenCV的条形码区域检测(一)
  17. 累计三年,断断续续的管理经验
  18. RK3568-B2-ANDROID11-WIFI-RTL8821CU
  19. 关于STM32G071RB的ADC采集误差问题
  20. 学习笔记-DataFrame求平均数,求众数

热门文章

  1. 满城尽带黄金甲的二三事
  2. 关于ios程序的后台运行
  3. 多地政府提及元宇宙发展 | 产业区块链发展周报
  4. 京东商城的title
  5. Golang单元测试快速上手(三) 高级技巧
  6. 信息与通信工程保研经验之上科大北理成电浙大东南西交
  7. 为什么要创建对象(实例化)?
  8. 测试测试测试测试测试测试
  9. 非静压模型NHWAVE学习(7)——波浪变形模拟算例学习(Wave transformation over an elliptical shoal)
  10. 华为linux磁盘空间,华为推出EROFS文件系统,磁盘性能大提速