1

我正在创建一个基于位置的提醒,EKReminder.

对于我CLGeocoder用来将地址转换为CLLocation.

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

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

在上一个问题中有更多关于此的有用信息: CLLocation 的 Horizo​​ntalAccuracy 和 VerticalAccuracy 指的是什么?

正如该答案中所建议的那样,horizontalAccuracy是100m。

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

如果我在 Apple 的 Reminders 应用程序中创建基于位置的提醒,它会带有radius = 0horizontalAccuracy = 0. 所以它使用默认的“提醒半径”(不知道那是什么),其值为0水平位置的不确定性......

我想避免在我的提醒中出现两个边距。我认为有两种选择可以实现这一目标:

a) 使用默认值radius,将EKStructuredLocation其设置为0并将返回的结果更改CLGeocoderhorizontalAccuracy0m。

b) 保持horizontalAccuracy(100m,或不同,视情况而定)与CLGeocoder- 但不使用默认值radius并将EKStructuredLocation其设置为较小的值,例如 1m。

想法?我是否正确理解了这些 API?

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

干杯

4

1 回答 1

2

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

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

  • 我在 Reminders 应用程序中创建了一个基于位置的提醒,它有radius = 0但也有报告horizontalAccuracy = 0
  • 我在自己的代码设置中使用相同的位置创建了一个提醒radius = 0,但从CLGeocoder报告中返回horizontalAccuracy = 100

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

于 2013-02-21T08:53:21.877 回答