创建基于位置的提醒:如何处理水平精度?

时间:2013-02-20 08:29:02

标签: iphone ios ios6 core-location cllocation

我正在创建基于位置的提醒EKReminder

对于我正在使用CLGeocoder将地址转换为CLLocation的坐标。

当涉及到提醒本身时,我认为有两个因素决定了提醒将会触发的“区域”(半径/圆圈)。

1)CLLocation的水平精度。 文档将horizontalAccuracy属性描述为“位置的不确定半径,以米为单位。(只读)”。

在上一个问题中有关于此的更多信息: What do horizontalAccuracy and verticalAccuracy of a CLLocation refer to?

正如答案中所建议的,horizontalAccuracy是100米。

2)radius上的EKStructuredLocation属性。此属性的讨论说明为“要使用默认半径,请将此属性设置为0。”

如果我在Apple的“提醒应用”库存中创建基于位置的提醒,则会显示radius = 0horizontalAccuracy = 0。因此,对于水平位置的不确定性,它使用默认的“提醒半径”(不知道那是什么),值为0 ...

我想避免在提醒中留下两个边距。我认为有两种方法可以做到这一点:

a)使用radius的默认EKStructuredLocation将其设置为0,然后将CLGeocoder返回的结果更改为horizontalAccuracy 0m。

b)保留horizontalAccuracy的{​​{1}}(100米,或不同,取决于具体情况) - 但不要使用CLGeocoder的默认radius并设置它到一些小的,比如1m。

思考?我能正确理解这些API吗?

  • 如果我使用返回的EKStructuredLocationhorizontalAccuracy的默认值,我会获得“双倍保证金”吗?
  • radius对象的horizontalAccuracy是否从坐标引入半径,还是纯粹提供有关位置不确定性的信息?

干杯

1 个答案:

答案 0 :(得分:1)

正如 progmr 所指出的,horizontalAccuracy纯粹是对该位置不确定性的估计。

为了支持这一点,我做了几个真实世界的测试:

  • 我在“提醒”应用中创建了基于位置的提醒,其中包含radius = 0,但也报告了horizontalAccuracy = 0
  • 我在自己的代码中使用相同的位置创建了提醒,设置了radius = 0,但是CLGeocoder报告horizontalAccuracy = 100
  • 的回复

每次测试时,提醒都会在完全相同的位置触发。 horizontalAccuracy纯粹是为了获取信息。