• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

swift 百度地图加载与百度地图电子围栏加载

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

最近在写百度地图电子围栏加载,研究源码,也花了一些时间。

1、百度电子围栏整体思路

    1)用户创造实体,赋予监控权限

    2)对该实体创造电子围栏,有服务端和本地端两种方式,先创造实体,上传到的服务器中。在对实体创造电子围栏,服务器端的有多边形,圆形,本地端的只有圆形围栏。

    3)查询对于该实体的电子围栏操作,从代理返回值中在地图上画出围栏。

    4)检测实体运动轨迹,若超出范围,则报警。(创建实体,允许获得用户轨迹,百度后台返回的代理)

一、工程配置

    按照官网提示的即可,swift要加桥接而已。

二、

0、调用百度地图服务之前,都需要设置ak mcode信息,否则调用不到

[objc] view plain copy
  1. let sop: BTKServiceOption = BTKServiceOption(ak: "ksqN5xi5s2Kpc6jlqW6Km5zk524pDhmy", mcode"www.arvin.com.baiduMap", serviceID200447, keepAlivefalse)  
  2.         BTKAction.sharedInstance().initInfo(sop)   

ak 是在百度地图申请的,mcode是工程的Bundle id。

1、添加百度地图,因为我们用鹰眼围栏是需要在地图上画出图形来的。

 _mapView = BMKMapView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height))

        self.view.addSubview(_mapView!)

按照百度地图官网或者其demo即可。

2、添加百度地图的第一步是首先需要创建实体,并给实体创建电子围栏,上传给百度地图服务器

[objc] view plain copy
  1. //设置地理围栏  
  2. func creatMapFrence() {  
  3.     //创建entity实体 entityDesc 字母数字下划线  
  4.     let request: BTKAddEntityRequest = BTKAddEntityRequest(entityName: "entityA", entityDesc"ThissaentityA", columnKey: nil, serviceID00000, tag1)  
  5.     BTKEntityAction.sharedInstance().addEntity(with: request, delegateself)  
  6. p;        //创建一个名称为“server_circle_fence” 的服务端圆形地理围栏,圆心坐标为东经116.3134度、北纬40.0478度,围栏半径为50米。它的监控对象为“entityA”,且当entityA这个终端实体的定位精度大于50米的轨迹点不参与此围栏的计算。  
  7.     //圆心40.055573298959558)Optional(116.30384089417596  
  8.     let center: CLLocationCoordinate2D = CLLocationCoordinate2D.init(latitude: 40.055573298959558, longitude116.30384089417596)  
  9.     //构造将要创建的新的围栏对象  
  10.     let fence: BTKServerCircleFence = BTKServerCircleFence(center: center, radius450.0, coordType.COORDTYPE_BD09LL, denoiseAccuracy50, fenceName"firstFenceName", monitoredObject"entityA")  
  11.     //构建请求对象  
  12.     let circleRequest: BTKCreateServerFenceRequest = BTKCreateServerFenceRequest.init(serverCircleFence: fence, serviceID00000, tag1)  
  13.     //发起请求  
  14.     BTKFenceAction.sharedInstance().createServerFence(with: circleRequest, delegateself)  
  15.     
  16. }  

完成之后,我们需要调用创建实体是否成功的代理,判断是否创建成功

[objc] view plain copy
  1. //创建地理围栏返回代理  
  2.    func onCreateServerFence(_ response: Data!) {  
  3.        guard let array:[String: Any] = try! JSONSerialization.jsonObject(with: response, options: []) as? [String: Anyelse {//转化失败就返回  
  4.            return  
  5.        }  
  6.        print("创建地理围栏\(array)")  
  7.    }  

2、搜索我们可以在鹰眼代理BTKFenceDelegate 中查询我们所创建的实体

[objc] view plain copy
  1. //查询围栏  
  2.     func qureyMapFernce() {  
  3.         //构建请求对象  
  4.         let request = BTKQueryServerFenceRequest(monitoredObject: "entityA", fenceIDs: nil, outputCoordType.COORDTYPE_BD09LL, serviceID000000, tag1)  
  5.         //发送查询请求  
  6.         BTKFenceAction.sharedInstance().queryServerFence(with: request, delegateself)  
  7.           
  8.     }  

查询地理围栏并且在地图上画出地理围栏

[objc] view plain copy
  1.     func onQueryServerFence(_ response: Data!) {  
  2.         guard let array:[String: Any] = try! JSONSerialization.jsonObject(with: response, options: []) as? [String: Anyelse {//转化失败就返回  
  3.             return  
  4.         }  
  5.         print("查询地理围栏\(array)")  
  6.         let size: NSInteger = array["size"] as! NSInteger  
  7.         //在地图上展示这些围栏  
  8.         //获取size 在地理位置信息  
  9.         //使用Annotation代表圆形围栏的圆心  
  10.         let centerAnnotations: NSMutableArray = NSMutableArray(capacity: size)  
  11.         //使用填充圆行围栏的覆盖物  
  12.         let radiusOverlays: NSMutableArray = NSMutableArray(capacity: size)  
  13.         //存储所有围栏的圆心位置,是为了确定地图的显示范围  
  14.         let coordinates: NSMutableArray = NSMutableArray(capacity: size)  
  15.         let dicFence: [[String: Any]] = array["fences"] as! [[String : Any]]  
  16.           
  17.         for fence in dicFence {  
  18.             //筛选circle的圆  
  19.             let circle: String = fence["shape"] as! String  
  20.             if circle == "circle" {  
  21.                 //解析数据 经纬度  
  22.                 let fenceCenter: CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: fence["latitude"] as! CLLocationDegrees, longitude: fence["longitude"] as! CLLocationDegrees)  
  23.                   
  24.                 let fenceRadius: Double = fence["radius"] as! Double  
  25.                 let fenceName: String = fence["fence_name"] as! String  
  26.                 let denoiseAccuracy: NSInteger = fence["denoise"] as! NSInteger  
  27.                 let monitoredObject: String = fence["monitored_person"] as! String  
  28.                   
  29.                 //存贮圆心位置 /*略有问题*/  
  30. //                let coordinateValue: NSValue = NSValue.init(bytes: &fenceCenter, objCType: "CLLocationCoordinate2D")  
  31.                   
  32.                 coordinates.add(fenceCenter)  
  33.      

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
[Swift]LeetCode391.完美矩形|PerfectRectangle发布时间:2022-07-13
下一篇:
Swift中获取相册图片与保存到相册发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap