以下内容自 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...相关推荐

  1. 设置电子围栏 高德地图_地理围栏-辅助功能-开发指南-Android 定位SDK | 高德地图API...

    以下内容自定位 SDK V3.2.0 版本后支持. 第一步,创建地理围栏 地理围栏没有最大个数限制,您可以无限制的创建围栏.但请您根据业务需求合理的创建围栏,控制围栏个数可以有效的保证程序执行效率.定 ...

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

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

  3. php 开发高德地图地理围栏,地理围栏-辅助功能-开发指南-Android 定位SDK | 高德地图API...

    以下内容自定位 SDK V3.2.0 版本后支持. 第一步,创建地理围栏 地理围栏没有最大个数限制,您可以无限制的创建围栏.但请您根据业务需求合理的创建围栏,控制围栏个数可以有效的保证程序执行效率.定 ...

  4. 高德sdk定位当前位置_单次定位-获取位置-开发指南-iOS 定位SDK | 高德地图API

    iOS定位SDK提供的单次定位方法基于苹果定位核心,苹果定位核心会在设备移动时连续返回定位结果,高德在此基础上封装了单次定位.当设备可以正常联网时,还可以返回该定位点的对应的中国境内位置信息(包括:省 ...

  5. ios 高德获取定位_单次定位-获取位置-开发指南-iOS 定位SDK | 高德地图API

    iOS定位SDK提供的单次定位方法基于苹果定位核心,苹果定位核心会在设备移动时连续返回定位结果,高德在此基础上封装了单次定位.当设备可以正常联网时,还可以返回该定位点的对应的中国境内位置信息(包括:省 ...

  6. android高德地图上加自定义菜单,自定义UI控件-UI界面定制-开发指南-Android 导航SDK | 高德地图API...

    关于自定义 UI 布局,您还可以参考官方Demo--完全自定义UI导航. 单元素自定义 可以通过AMapNaviViewOptions中如下接口进行单UI元素显示隐藏,只列出部分接口,更多功能请参考A ...

  7. android 地图导航开发思路,基础功能-导航组件-开发指南-Android 导航SDK | 高德地图API...

    预置条件 请在您工程的 AndroidManifest.xml 中配置声明导航组件 Activity: android:name="com.amap.api.navi.AmapRouteAc ...

  8. android 双导航组件,高级功能-导航组件-开发指南-Android 导航SDK | 高德地图API

    导航组件的配置类 AmapNaviParams中提供了很多配置方法,支持在启动同时传入,满足自定义需求. 启动相关配置 如果已经在外部通过AMapNavi计算过一条路线,可以选择启动组件不进行重新算路 ...

  9. android双导航功能,高级功能-导航组件-开发指南-Android 导航SDK | 高德地图API

    导航组件的配置类 AmapNaviParams中提供了很多配置方法,支持在启动同时传入,满足自定义需求. 启动相关配置 如果已经在外部通过AMapNavi计算过一条路线,可以选择启动组件不进行重新算路 ...

最新文章

  1. J2EE Java泛型的好处
  2. 2015年获得大数据顶尖职位必备的9项技能
  3. static_cast、dynamic_cast、reinterpret_cast、const_cast[转]
  4. 【数据库系统】实例和模式
  5. centos安装下载桌面
  6. 读大道至简——编程的精义感想
  7. 【Python实例第17讲】均值偏移聚类算法
  8. Win10安装python扩展的几种方式
  9. 【Git版本控制管理】Git入门介绍及Git的安装
  10. solidworks_adams_simuilink联合仿真简易教程
  11. Python 错误重试库 tenacity retry
  12. STM32F107VCTx HAL库 USART通信 DMA通信 友善串口调试助手 PL2303驱动安装
  13. 送你一波运维背锅专用图~
  14. DirSync: List of attributes that are synced by the Azure Active Directory Sync Tool
  15. 如何获得当前所在的DLL模块名称
  16. CISC(复杂指令集)与RISC(精简指令集)的区别
  17. wordpress更改主页
  18. ipad2018电池测试软件,2018款iPad Pro内部做工值得买吗?iPad Pro 2018详细拆机图解评测...
  19. 电机与电力拖动控制系统第一次总结(包含绪论及变压器部分)
  20. 3D建模师容易找工作?

热门文章

  1. android 常用RGB值
  2. redis变慢原因记录
  3. 视口,像素和屏幕宽度获取方法
  4. 校园外卖配送系统的设计与实现
  5. python for ArcGIS 绘制苏州市板块地图
  6. 基于FPGA:如何通过电调控制无刷电机(包含FPGA及Arduino程序)
  7. 苹果11蓝牙配对不成功怎么办_iphone11连接不上蓝牙的原因及解决方法
  8. java插件redis,jfinal redis插件报错
  9. php如何导入字体样式,css怎么引入外部字体?css 字体样式设置的方法(实例)...
  10. 关于计算机病毒的免疫性研究 (转)