可用于车辆的区域预警,人员区域监控,防止走失等场景。
用到产品ioses 定位 SDK
核心类/接口
可参考:ioses 地理围栏开发指南
核心难点请求围栏:
Objective-CSwiftself.geoFenceManager.activeAction = AMapGeoFenceActiveActionInside | AMapGeoFenceActiveActionOutside | AMapGeoFenceActiveActionStayed; //监听进入、退出、停留事件,默认值为AMapGeoFenceActiveActionInside[self.geoFenceManager removeAllGeoFenceRegions]; //移除所有已经添加的围栏,如果有正在请求的围栏也会丢弃[self.geoFenceManager addKeywordPOIRegionForMonitoringWithKeyword:@"麦当劳" POIType:@"快餐厅" city:@"北京" size:2 customID:@"poi_keyword"]; //POI关键词[self.geoFenceManager addAroundPOIRegionForMonitoringWithlocationsPoint:coordinate aroundRadius:5000 keyword:@"肯德基" POIType:@"快餐厅" size:2 customID:@"poi_around"]; //POI周边[self.geoFenceManager addDistrictRegionForMonitoringWithDistrictName:@"西城区" customID:@"district_1"]; //行政区域//地理围栏状态改变时回调,当围栏状态的值发生改变,定位失败都会调用- (void)amapGeoFenceManager:(AMapGeoFenceManager *)manager didGeoFencesStatusChangedForRegion:(AMapGeoFenceRegion *)region customID:(NSString *)customID error:(NSError *)error { if (error) { NSLog(@"status changed error %@",error); }else{ NSLog(@"status changed %@",[region description]); }}self.geoFenceManager.activeAction = [AMapGeoFenceActiveAction.inside , AMapGeoFenceActiveAction.outside , AMapGeoFenceActiveAction.stayed ]//进入,离开,停留都要进行通知self.geoFenceManager.removeAllGeoFenceRegions() //移除所有已经添加的围栏,如果有正在请求的围栏也会丢弃self.geoFenceManager.addKeywordPOIRegionForMonitoring(withKeyword: "北京大学", poiType: "高等院校", city: "北京", size: 20, customID: "poi_1") //POI关键词self.geoFenceManager.addAroundPOIRegionForMonitoring(withlocationsPoint: coordinate, aroundRadius: 10000, keyword: "肯德基", poiType: "050301", size: 20, customID: "poi_2") //POI周边self.geoFenceManager.addDistrictRegionForMonitoring(withDistrictName: "海淀区", customID: "district_1") //行政区域//地理围栏状态改变时回调,当围栏状态的值发生改变,定位失败都会调用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)") }}在地图上绘制围栏的方法如下,根据围栏的边界绘制圆形和多边形。
Objective-CSwift//添加地理围栏对应的Overlay,方便查看。地图上显示圆- (MACircle *)showCircleInMap:(CLlocationsCoordinate2D )coordinate radius:(NSInteger)radius { MACircle *circleOverlay = [MACircle circleWithCenterCoordinate:coordinate radius:radius]; [self.mapView addOverlay:circleOverlay]; return circleOverlay;}//地图上显示多边形- (MAPolygon *)showPolygonInMap:(CLlocationsCoordinate2D *)coordinates count:(NSInteger)count { MAPolygon *polygonOverlay = [MAPolygon polygonWithCoordinates:coordinates count:count]; [self.mapView addOverlay:polygonOverlay]; return polygonOverlay;}//添加地理围栏对应的Overlay,方便查看。地图上显示圆 func showCircle(inMap coordinate: CLlocationsCoordinate2D, radius: CLlocationsDistance) -> MACircle { let circleOverlay = MACircle(center: coordinate, radius: radius) self.mapView.add(circleOverlay) return circleOverlay! }