Tag: 核心位置

区域监视(也称为地理围栏)

我在一家人力资源外包公司工作,我们目前正在开发一个应用程序,该应用程序使用最先进的技术跟踪员工的办公时间。 基于上述构想,我们正在开发一种应用程序,该应用程序使用移动应用程序跟踪员工的时间安排和现场人员。 尽管我们在该应用程序中使用了多种技术。 我们将仅在此处讨论GEO FENCING。 应用程序的一些用例: 实时无缝时钟输入-满足您所有业务需求的时钟输出 时间表应用程序非常适合任何业务,它可以捕获实时数据,基于云,并且非常灵活。 通过实时位置跟踪提高效率 全方位的位置跟踪选项,能够通过移动设备跟踪员工。 获得有关员工如何在工作场所度过时间的透明视图。 区域监视(也称为地理围栏)是一种在用户进入或退出地理区域时向您的应用发出警报的方法。 您可以使用区域监视来执行与位置相关的任务。 例如,Reminders应用程序使用它们在用户到达或离开指定位置时触发提醒,如图1所示。 图1离开地理区域时通知用户 在iOS中,区域由系统监控,当用户越过定义的区域边界时,系统会根据需要唤醒您的应用。 地理围栏将对用户当前位置的意识与对用户可能感兴趣的位置的接近度的意识结合在一起。 要标记感兴趣的位置,请指定其纬度和经度。 要调整位置的接近度,请添加半径。 纬度,经度和半径定义地理围栏,在感兴趣的位置周围创建圆形区域或围栏。 定义和监视地理区域 区域是一个以地理坐标为中心的圆形区域,您可以使用CLCircularRegion对象定义一个CLCircularRegion 。 区域对象的半径定义其边界。 通过调用CLLocationManager对象的startMonitoring(for:)方法,可以定义要监视的区域并在系统中注册它们。 系统会监视您的区域,直到您明确要求其停止或直到设备重启为止。 清单1显示了如何配置和注册以该方法的调用者提供的点为中心的区域。 该方法使用允许的最大半径来定义区域的边界,并要求系统仅在用户进入区域时才发送通知。 清单1监视指定坐标周围的区域 func monitorRegionAtLocation(center:CLLocationCoordinate2D,identifier:String){ //确保该应用已获得授权。 如果CLLocationManager.authorizationStatus()== .authorizedAlways { //确保支持区域监视。 如果CLLocationManager.isMonitoringAvailable(for:CLCircularRegion.self){ //注册区域。 让maxDistance = locationManager.maximumRegionMonitoringDistance 设region = CLCircularRegion(center:center, 半径:maxDistance,标识符:标识符) region.notifyOnEntry = true region.notifyOnExit =假 locationManager.startMonitoring(用于:地区) } } } 每当用户越过应用程序的注册区域之一的边界时,系统就会通知您的应用程序。 […]

适用于iOS 10和Swift 4的Square Region Geofencing

监视圆形区域的替代区域 地理围栏,地理围栏,地理围栏……多么美丽的技术。 😊😊 一点定义: 地理围栏是现实世界地理区域的虚拟边界。 可以动态生成地理围栏-例如在点位置周围的半径中,也可以是一组预定义的边界(例如学校区域或邻里边界)。 是的,如果您还没有弄清楚的话,这个定义来自我的好友Wikipedia,他在解释事物方面做得很好。 (这是我的个人观点!😌) 现在让我们进入主题! iOS 10在地理围栏方面做得很好。 但这有一些限制,例如您可以监视的区域数量(限制为20个),区域的半径(不少于100米),并且只能使用一种形状进行监视:一个完美的圆形区域。 如果要监视40米以内的正方形区域会怎样? 好吧,这就是我遇到了一段时间的问题。 为了解决此问题,我必须制作自己的CocoaPods库“ SquareRegion”来解决此问题。 演示版 多位置监控 单一位置监控 SquareRegion如何 工作? 首先,在您的Podfile中添加SquareRegion。 pod’SquareRegion’ 说明: 导入SquareRegion。 设置委托。 将委托分配给视图控制器(自身)。 设置您的区域(正方形区域)的中心坐标。 声明您的正方形区域属性:regionWithCenter是区域的中心, sideLength是正方形的长度(以公里为单位,因此需要转换为米), 标识符是区域的唯一键。 使用方法addRegionToMonitor(region 🙂将区域添加到监视器。 添加核心位置的CLLocationManagerDelegate(作为扩展)。 开始使用新位置更新正方形区域。 使视图控制器符合RegionProtocol。 使用相关的委托方法进入或离开您的区域时,请做点很酷的事情! 如何在iOS上模拟地理位置 ? 好了,您可以从Appcoda阅读一个很好的相关教程。 SquareRegion是“核心位置”的圆形区域的替代方法。 它可让您在边长至少25米的小区域内观察所需的尽可能多的位置范围。 您也可以在Product Hunt上投票支持该项目! 👍🏾😊 您可以在此处找到豆荚仓库。 在我的社交媒体上添加并关注我! 领英 脸书 天使主义者

Swift 4.2 Reduce和CoreLocation:总行驶距离🚗

在最近的一个项目中,我遇到了一个非常确定的问题,我敢肯定其他许多开发人员也会遇到:计算列表中存储的位置之间的总距离。 例如,假设您在由CLLocation对象列表表示的地图上有一条自定义路线。 您如何仅从CLLocation对象计算路线的总长度? 其背后的数学很简单,绝对没有理由写一个故事: 总距离等于列表中所有连接的位置对之间的距离之和 。 对于位置[A,B,C,D]的列表,可以表示为: | AD | = | AB | + | BC | + | CD |。 但是,可以使用我们位置对象上提供的函数distance(from :)以不同的方式完成该实现。 样板解决方案: 使用传统的面向对象方法,可以通过几个变量和位置迭代来解决此问题: 样板解决方案 该实现完全按照我们的预期工作,并且对于任何初看它的开发人员来说都是可读性和可理解性。 但是(没有双行中断),对于需要参考下一个/上一个元素以及将在集合迭代期间进行调整的变量的任何给定问题,最有可能重写这9行代码因此命名为样板解决方案)。 递归解决方案: 递归专家将很快意识到这是一个递归问题:我们为递归列表的一部分积累一个临时结果,并使用积累的结果对列表的其余部分执行相同的操作。 这就是为什么递归函数可以帮助我们节省几行样板代码的原因: 递归解决方案 但是仅通过查看递归函数就可以肯定地说,我们获得的一行代码(与样板解决方案相比)不值得在递归调用中引入一致性和简单性的损失-请记住,并非所有开发人员对递归同样感到高兴。 简化的解决方案: 如果我告诉过您所有的样板代码和递归代码都可以限制为一行代码怎么办? 一个纯粹的面向对象的开发人员可能不会相信我,但是实际上,这是可以实现的。 如果考虑我们在做什么,我们将在递归数据结构上应用组合函数(distance(from :)),并以递归方式使用函数的每次应用结果。 这正是函数编程中高阶函数折叠所做的定义¹。 幸运的是,在Swift中,我们有一个类似的功能可以折叠: reduce(_:_:)函数reduce(_:_:) 。 reduce函数将初始结果和闭包作为参数,然后在返回最终结果之前使用闭包组合Sequence的每个元素。 最简单的示例是使用reduce函数对整数列表求和: [2,5,3,10] .reduce(0,+)//返回20 但是,在我们的情况下,我们需要更加具体,因为+函数实际上不适用于CLLocation对象。 相反,我们希望应用distance(from:)函数。 为此,我们还需要引用列表中的上一个(或下一个)元素。 reduce函数不会自动为您提供下一个元素的访问权限(与其他任何迭代一样),因此,为了解决此问题,我们可以使用元组作为初始累加结果,第一个元素是累加距离,第二个元素是累加距离先前的CLLocation对象: (CLLocationDistance, CLLocation?) 。 location元素是可选的,因为在我们提供给reduce函数的初始结果中没有先前的元素。 […]