设置电子围栏 高德地图_地理围栏-辅助功能-开发指南-iOS 定位SDK | 高德地图API...
以下内容自 iOS 定位SDK V2.3.0 后支持。
第 1 步,引入头文件
在调用地理围栏功能的类中引入AMapFoundationKit.h和AMapLocationKit.h这两个头文件,注意Swift需要在桥接文件中引入头文件:
#import
#import
//在桥接文件中引入头文件
#import
#import
第 2 步,配置Key
在调用定位时,需要添加Key,需要注意的是请在 SDK 任何类的初始化以及方法调用之前设置正确的 Key。
如果您使用的是定位SDK v2.x版本需要引入基础 SDK AMapLocationKit.framework ,设置apiKey的方式如下:
iOS 定位SDK v2.x版本设置 Key:
[AMapServices sharedServices].apiKey =@"您的key";
AMapServices.shared().apiKey = "您的key"
第 3 步:创建地理围栏
地理围栏没有最大个数限制,您可以无限制的创建围栏。但请您根据业务需求合理的创建围栏,控制围栏个数可以有效的保证程序执行效率。定位 SDK 提供根据高德POI、行政区划,自定义圆形、自定义多边形四种方式创建地理围栏。
1、初始化地理围栏管理manager
self.geoFenceManager = [[AMapGeoFenceManager alloc] init];
self.geoFenceManager.delegate = self;
self.geoFenceManager.activeAction = AMapGeoFenceActiveActionInside | AMapGeoFenceActiveActionOutside | AMapGeoFenceActiveActionStayed; //设置希望侦测的围栏触发行为,默认是侦测用户进入围栏的行为,即AMapGeoFenceActiveActionInside,这边设置为进入,离开,停留(在围栏内10分钟以上),都触发回调
self.geoFenceManager.allowsBackgroundLocationUpdates = YES; //允许后台定位
self.geoFenceManager = AMapGeoFenceManager()
self.geoFenceManager.delegate = self
self.geoFenceManager.activeAction = [AMapGeoFenceActiveAction.inside , AMapGeoFenceActiveAction.outside , AMapGeoFenceActiveAction.stayed ]//进入,离开,停留都要进行通知
self.geoFenceManager.allowsBackgroundLocationUpdates = true //允许后台定位
2、创建高德POI地理围栏
提供两个创建高德POI围栏的接口,一个是根据关键字创建POI围栏,另一个是根据经纬度进行周边搜索创建POI围栏。
根据关键字创建围栏:
- (void)addKeywordPOIRegionForMonitoringWithKeyword:(NSString *)keyword POIType:(NSString *)type city:(NSString *)city size:(NSInteger)size customID:(NSString *)customID;
参数说明
参数说明示例
keywordPOI关键字北京大学
typePOI类型高等院校
cityPOI所在的城市名称北京
customID与围栏关联的自有业务ID
示例代码
[self.geoFenceManager addKeywordPOIRegionForMonitoringWithKeyword:@"北京大学" POIType:@"高等院校" city:@"北京" size:20 customID:@"poi_1"];
self.geoFenceManager.addKeywordPOIRegionForMonitoring(withKeyword: "北京大学", poiType: "高等院校", city: "北京", size: 20, customID: "poi_1")
根据周边POI创建围栏:
- (void)addAroundPOIRegionForMonitoringWithLocationPoint:(CLLocationCoordinate2D)locationPoint aroundRadius:(NSInteger)aroundRadius keyword:(NSString *)keyword POIType:(NSString *)type size:(NSInteger)size customID:(NSString *)customID;
参数说明
参数说明示例
locationPoint周边区域中心点的经纬度,以此中心点建立周边地理围栏(39.908692, 116.397477)
aroundRadius周边半径,0-50000米,默认为3000米,这个是搜索半径,不是建立的围栏的半径
keywordPOI关键字肯德基
typePOI类型050301
customID与围栏关联的自有业务ID
示例代码
CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(39.908692, 116.397477); //天安门
[self.geoFenceManager addAroundPOIRegionForMonitoringWithLocationPoint:coordinate aroundRadius:10000 keyword:@"肯德基" POIType:@"050301" size:20 customID:@"poi_2"];
let coordinate = CLLocationCoordinate2DMake(39.908692, 116.397477) //天安门
self.geoFenceManager.addAroundPOIRegionForMonitoring(withLocationPoint: coordinate, aroundRadius: 10000, keyword: "肯德基", poiType: "050301", size: 20, customID: "poi_2")
3、创建行政区域围栏
根据行政区域关键字创建行政区域围栏:
- (void)addDistrictRegionForMonitoringWithDistrictName:(NSString *)districtName customID:(NSString *)customID;
参数说明
参数说明示例
districtName行政区域关键字海淀区
customID与围栏关联的自有业务ID
示例代码
[self.geoFenceManager addDistrictRegionForMonitoringWithDistrictName:@"海淀区" customID:@"district_1"];
self.geoFenceManager.addDistrictRegionForMonitoring(withDistrictName: "海淀区", customID: "district_1")
4、创建自定义圆形围栏
需要提供中心点和半径来创建圆形围栏,一次创建一个
- (void)addCircleRegionForMonitoringWithCenter:(CLLocationCoordinate2D)center radius:(CLLocationDistance)radius customID:(NSString *)customID;
参数说明
参数说明示例
center围栏中心点的经纬度
radius要创建的围栏的半径,半径大于0,单位米
customID与围栏关联的自有业务ID
示例代码
CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(39.908692, 116.397477); //天安门
[self.geoFenceManager addCircleRegionForMonitoringWithCenter:coordinate radius:300 customID:@"circle_1"];
let coordinate = CLLocationCoordinate2DMake(39.908692, 116.397477) //天安门
self.geoFenceManager.addCircleRegionForMonitoring(withCenter: coordinate, radius: 300, customID: "circle_1")
5、创建自定义多边形围栏
根据经纬度坐标数据添加一个闭合的多边形围栏,点与点之间按顺序尾部相连, 第一个点与最后一个点相连,一次创建一个
- (void)addPolygonRegionForMonitoringWithCoordinates:(CLLocationCoordinate2D *)coordinates count:(NSInteger)count customID:(NSString *)customID;
参数说明
参数说明示例
coordinates经纬度坐标点数据,coordinates对应的内存会拷贝,调用者负责该内存的释放,最少3个点
countcoordinates对应的个数
customID与围栏关联的自有业务ID
示例代码
NSInteger count = 4;
CLLocationCoordinate2D *coorArr = malloc(sizeof(CLLocationCoordinate2D) * count);
coorArr[0] = CLLocationCoordinate2DMake(39.933921, 116.372927); //平安里地铁站
coorArr[1] = CLLocationCoordinate2DMake(39.907261, 116.376532); //西单地铁站
coorArr[2] = CLLocationCoordinate2DMake(39.900611, 116.418161); //崇文门地铁站
coorArr[3] = CLLocationCoordinate2DMake(39.941949, 116.435497); //东直门地铁站
[self.geoFenceManager addPolygonRegionForMonitoringWithCoordinates:coorArr count:count customID:@"polygon_1"];
free(coorArr);
coorArr = NULL;
var coordinates: [CLLocationCoordinate2D] = [
CLLocationCoordinate2D(latitude: 39.933921, longitude: 116.372927),
CLLocationCoordinate2D(latitude: 39.907261, longitude: 116.376532),
CLLocationCoordinate2D(latitude: 39.900611, longitude: 116.418161),
CLLocationCoordinate2D(latitude: 39.941949, longitude: 116.435497)]
self.geoFenceManager.addPolygonRegionForMonitoring(withCoordinates: &coordinates, count: 4, customID: "polygon_1")
第 4 步,开始定位
当围栏创建完毕,且围栏创建成功时会启动定位,这部分无需您来设置,SDK内部执行。 定位机制:通过“远离围栏时逐渐降低定位频率”来降低电量消耗,“离近围栏时逐渐提高定位频率”来保证有足够的定位精度从而完成围栏位置检测。
需要注意,在iOS9及之后版本的系统中,如果您希望程序在后台持续检测围栏触发行为,需要保证manager的allowsBackgroundLocationUpdates为YES,设置为YES的时候必须保证 Background Modes 中的 Location updates 处于选中状态,否则会抛出异常。
第 5 步,获取围栏创建后的回调和围栏状态改变时的回调
创建围栏后的信息和围栏状态改变时的信息均会通过AMapGeoFenceManagerDelegate进行回调,设置内容如下:
self.geoFenceManager.delegate = self;
self.geoFenceManager.delegate = self
1、获取围栏创建后的回调
在如下回调中知道创建的围栏是否成功,以及查看所创建围栏的具体内容。
- (void)amapGeoFenceManager:(AMapGeoFenceManager *)manager didAddRegionForMonitoringFinished:(NSArray *)regions customID:(NSString *)customID error:(NSError *)error {
if (error) {
NSLog(@"创建失败 %@",error);
} else {
NSLog(@"创建成功");
}
}
func amapGeoFenceManager(_ manager: AMapGeoFenceManager!, didAddRegionForMonitoringFinished regions: [AMapGeoFenceRegion]!, customID: String!, error: Error!) {
if let error = error {
let error = error as NSError
NSLog("创建失败 %@",error);
}
else {
NSLog("创建成功")
}
}
2、围栏状态改变时的回调
在如下回调中知道围栏的状态是否发生改变,或者定位是否失败。围栏的状态表示的就是用户和围栏的关系,有未知、进入围栏、退出围栏、在围栏内停留。回调触发的条件需同时满足:1.围栏的状态从A变成B;2.B符合您在第一步设置的需要侦测的行为的范围内。当然如果self.geoFenceManager.activeAction在监听的过程中改变了,所有符合侦测范围的围栏即使状态没有改变也会再次触发回调。
- (void)amapGeoFenceManager:(AMapGeoFenceManager *)manager didGeoFencesStatusChangedForRegion:(AMapGeoFenceRegion *)region customID:(NSString *)customID error:(NSError *)error {
if (error) {
NSLog(@"status changed error %@",error);
}else{
NSLog(@"status changed success %@",[region description]);
}
}
func amapGeoFenceManager(_ manager: AMapGeoFenceManager!, didGeoFencesStatusChangedFor region: AMapGeoFenceRegion!, customID: String!, error: Error!) {
if error == nil {
print("status changed \(region.description)")
} else {
print("status changed error \(error)")
}
}
最后,移除围栏
当不再需要使用围栏时,可以调用以下几个函数对已经设定的围栏进行移除操作。
- (void)removeTheGeoFenceRegion:(AMapGeoFenceRegion *)region; //移除指定围栏
- (void)removeGeoFenceRegionsWithCustomID:(NSString *)customID; //移除指定customID的围栏
- (void)removeAllGeoFenceRegions; //移除所有围栏
设置电子围栏 高德地图_地理围栏-辅助功能-开发指南-iOS 定位SDK | 高德地图API...相关推荐
- 设置电子围栏 高德地图_地理围栏-辅助功能-开发指南-Android 定位SDK | 高德地图API...
以下内容自定位 SDK V3.2.0 版本后支持. 第一步,创建地理围栏 地理围栏没有最大个数限制,您可以无限制的创建围栏.但请您根据业务需求合理的创建围栏,控制围栏个数可以有效的保证程序执行效率.定 ...
- vue使用高德地图画电子围栏_地理围栏-辅助功能-开发指南-iOS 定位SDK | 高德地图API...
以下内容自 iOS 定位SDK V2.3.0 后支持. 第 1 步,引入头文件 在调用地理围栏功能的类中引入AMapFoundationKit.h和AMapLocationKit.h这两个头文件,注意 ...
- php 开发高德地图地理围栏,地理围栏-辅助功能-开发指南-Android 定位SDK | 高德地图API...
以下内容自定位 SDK V3.2.0 版本后支持. 第一步,创建地理围栏 地理围栏没有最大个数限制,您可以无限制的创建围栏.但请您根据业务需求合理的创建围栏,控制围栏个数可以有效的保证程序执行效率.定 ...
- 高德sdk定位当前位置_单次定位-获取位置-开发指南-iOS 定位SDK | 高德地图API
iOS定位SDK提供的单次定位方法基于苹果定位核心,苹果定位核心会在设备移动时连续返回定位结果,高德在此基础上封装了单次定位.当设备可以正常联网时,还可以返回该定位点的对应的中国境内位置信息(包括:省 ...
- ios 高德获取定位_单次定位-获取位置-开发指南-iOS 定位SDK | 高德地图API
iOS定位SDK提供的单次定位方法基于苹果定位核心,苹果定位核心会在设备移动时连续返回定位结果,高德在此基础上封装了单次定位.当设备可以正常联网时,还可以返回该定位点的对应的中国境内位置信息(包括:省 ...
- android高德地图上加自定义菜单,自定义UI控件-UI界面定制-开发指南-Android 导航SDK | 高德地图API...
关于自定义 UI 布局,您还可以参考官方Demo--完全自定义UI导航. 单元素自定义 可以通过AMapNaviViewOptions中如下接口进行单UI元素显示隐藏,只列出部分接口,更多功能请参考A ...
- android 地图导航开发思路,基础功能-导航组件-开发指南-Android 导航SDK | 高德地图API...
预置条件 请在您工程的 AndroidManifest.xml 中配置声明导航组件 Activity: android:name="com.amap.api.navi.AmapRouteAc ...
- android 双导航组件,高级功能-导航组件-开发指南-Android 导航SDK | 高德地图API
导航组件的配置类 AmapNaviParams中提供了很多配置方法,支持在启动同时传入,满足自定义需求. 启动相关配置 如果已经在外部通过AMapNavi计算过一条路线,可以选择启动组件不进行重新算路 ...
- android双导航功能,高级功能-导航组件-开发指南-Android 导航SDK | 高德地图API
导航组件的配置类 AmapNaviParams中提供了很多配置方法,支持在启动同时传入,满足自定义需求. 启动相关配置 如果已经在外部通过AMapNavi计算过一条路线,可以选择启动组件不进行重新算路 ...
最新文章
- J2EE Java泛型的好处
- 2015年获得大数据顶尖职位必备的9项技能
- static_cast、dynamic_cast、reinterpret_cast、const_cast[转]
- 【数据库系统】实例和模式
- centos安装下载桌面
- 读大道至简——编程的精义感想
- 【Python实例第17讲】均值偏移聚类算法
- Win10安装python扩展的几种方式
- 【Git版本控制管理】Git入门介绍及Git的安装
- solidworks_adams_simuilink联合仿真简易教程
- Python 错误重试库 tenacity retry
- STM32F107VCTx HAL库 USART通信 DMA通信 友善串口调试助手 PL2303驱动安装
- 送你一波运维背锅专用图~
- DirSync: List of attributes that are synced by the Azure Active Directory Sync Tool
- 如何获得当前所在的DLL模块名称
- CISC(复杂指令集)与RISC(精简指令集)的区别
- wordpress更改主页
- ipad2018电池测试软件,2018款iPad Pro内部做工值得买吗?iPad Pro 2018详细拆机图解评测...
- 电机与电力拖动控制系统第一次总结(包含绪论及变压器部分)
- 3D建模师容易找工作?