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

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

关于提醒本身,我认为涉及两个因素来确定提醒将触发的“区域”(半径/圆圈)。

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

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

如该答案所建议,horizontalAccuracy为100m。

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

如果我在Apple的股票Reminders应用程序中创建基于位置的提醒,则它带有radius = 0horizontalAccuracy = 0。因此,它使用默认的“提示半径”(不知道这是什么)和0的值来表示水平位置的不确定性...

我想避免在提醒中留出两个空白。我认为有两种选择可以实现此目的:

a)通过将默认radius设置为EKStructuredLocation来使用0的默认CLGeocoder,并将从horizontalAccuracy返回的结果更改为horizontalAccuracy为0m。

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

有什么想法吗?我是否正确理解这些API?

  • 如果我使用返回的radiushorizontalAccuracy的默认值,是否会获得“双倍利润”?
  • CLLocation对象的ojit_code是否从坐标引入半径,还是纯粹提供有关位置不确定性的信息?

  • 干杯

    最佳答案

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

    为此,我进行了一些实际测试,其中:

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

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

    10-08 02:57