我听说过地理围栏,但有些疑问。希望您能回答一些问题。
-它在iOS 5.1中是新功能,但是地理围栏和使用区域的区别是什么?从我所读到的来看,几乎相同,会耗费电池吗?
-为什么我找不到苹果关于地理围栏的文档?
-如何定义这些区域?我可以通过WebService远程添加吗?
谢谢。
我听说过地理围栏,但有些疑问。希望您能回答一些问题。
-它在iOS 5.1中是新功能,但是地理围栏和使用区域的区别是什么?从我所读到的来看,几乎相同,会耗费电池吗?
-为什么我找不到苹果关于地理围栏的文档?
-如何定义这些区域?我可以通过WebService远程添加吗?
谢谢。
Geofencing自iOS 4以来就已经存在了。您可以在Apple位置感知编程指南中找到相关文档。它也被称为“区域监视”。
使用这些区域非常简单。使用中心点(纬度,经度)、半径和唯一标识符创建一个CLRegion
,然后调用-startMonitoringForRegion
。当然,您需要注册CLLocationManagerDelegate
以便监听回调(-didEnterRegion
和-didExitRegion
),但这也很容易做到。
您无法远程添加这些区域,只能从设备上添加。我在过去的几年中学到了一些关于它们的事情,因此希望这将节省您未来的一些麻烦。
Geofences是一种在不需要GPS或位置跟踪的情况下添加位置功能的好方法。据我的经验,即使始终开启,geofences也不会对电池寿命造成明显影响。苹果公司已经非常成功地解决了这个问题。它们的准确度不如主动GPS,但足够接近。祝你好运。
更新
这里的一些信息现在已经有点过时了。您现在可以监视的区域数量为20个,并且每个应用程序都有上限。此外,最小大小不是100M,它可能更小,但在较低数字下准确性不能保证。自iOS 4以来,“地理围栏”一直存在,以“区域监视”的形式存在。它使用距离检查来判断是否进入了圆圈。这不是真正的地理围栏,因为真正的地理围栏是检查一个点是否落在多边形内(称为点和多边形)。
截至iOS 6,目前没有类似于使用点和多边形的区域监视的东西。要进行真正的地理围栏,您需要同时使用区域监视和GPS。由于CoreLocation不支持地理围栏,因此没有苹果文档可用于地理围栏。
如果您要采取点-多边形方法,我建议使用射线投射。有一个Objective-C类实现得非常好。它被称为objc-BorderPatrol。
至于从Web服务发送围栏,可能可以做类似于Twitter流API的事情,但那可能太过于繁琐。最好使用“显著位置”来更新您的围栏。如果您要从Web服务发送围栏,我建议使用MySQL或PostGRE SQL,因为两者都具有非常好的地理空间扩展功能。
一些注意事项: - >-[CLRegion containsCoordinate:]
永远不会被任何 CoreLocation 对象调用。所有距离检查都是内部完成的。
- > 重要位置更新每500米或5分钟,以先到者为准。重要位置使用来自基站的 IP 地址来确定位置。
- > 地理围栏和区域可以重叠,请注意跟踪。