我正在创建一个基于位置的提醒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 = 0
和horizontalAccuracy = 0
。因此,它使用默认的“提示半径”(不知道这是什么)和0
的值来表示水平位置的不确定性...
我想避免在提醒中留出两个空白。我认为有两种选择可以实现此目的:
a)通过将默认radius
设置为EKStructuredLocation
来使用0
的默认CLGeocoder
,并将从horizontalAccuracy
返回的结果更改为horizontalAccuracy
为0m。
b)保留CLGeocoder
中的radius
(100m,或不同,视情况而定)-但不要使用EKStructuredLocation
的默认horizontalAccuracy
并将其设置为较小的值,例如1m。
有什么想法吗?我是否正确理解这些API?
radius
和horizontalAccuracy
的默认值,是否会获得“双倍利润”? CLLocation
对象的ojit_code是否从坐标引入半径,还是纯粹提供有关位置不确定性的信息? 干杯
最佳答案
正如progmr指出的,horizontalAccuracy
纯粹是位置不确定性的估计。
为此,我进行了一些实际测试,其中:
radius = 0
但也报告了horizontalAccuracy = 0
。 radius = 0
,但是CLGeocoder
的返回报告了horizontalAccuracy = 100
每次测试时,提醒音都会在完全相同的位置发射。
horizontalAccuracy
纯粹是为了提供信息。