Декодирование констант CLLocationAccuracy

следующее перечислено в CLLocation.h, но, судя по моему опыту, они обманывают имена - возможно, изначально они были задуманы для двух целей: 1. для проверки точности возвращаемого местоположения, но также 2. для установки того, насколько усердно работает диспетчер местоположения, в частности, что включено (gps ( сколько спутниковых каналов), насколько сильно работает Wi-Fi, триангуляция и т. д.

extern const CLLocationAccuracy kCLLocationAccuracyBestForNavigation; // (raw value: -2)
extern const CLLocationAccuracy kCLLocationAccuracyBest; // (raw value: -1)
extern const CLLocationAccuracy kCLLocationAccuracyNearestTenMeters; // (raw value: 10)
extern const CLLocationAccuracy kCLLocationAccuracyHundredMeters; // (raw value: 100)
extern const CLLocationAccuracy kCLLocationAccuracyKilometer; // (raw value: 1000)
extern const CLLocationAccuracy kCLLocationAccuracyThreeKilometers; // (raw value: 3000)

Я хотел бы взглянуть на CLLocation.m, но так как это вряд ли произойдет в ближайшее время - есть ли у кого-нибудь какие-либо полевые испытания, показывающие, что они думают, что происходит с этими разными режимами.

то есть kCLLocationAccuracyBest = 10 спутников (каналов / соединительных линий?), 100% мощность Wi-Fi и т. д.

это тип информации, которую Apple должна была предоставить -

я действительно хочу знать, что на самом деле происходит с kCLLocationAccuracyThreeKilometer в отношении разряда батареи - включен ли GPS? 1 спутниковая магистраль? Wi-Fi включен ? Wi-Fi по таймеру? Кто знает? Я знаю, что хочу

32
задан Honey 29 September 2018 в 21:11
поделиться

2 ответа

Весь смысл использования extern, а не раскрытия того, что на самом деле происходит, заключается в том, что under-gerwerkkins может измениться, и вашему коду не нужно беспокоиться об этом, чтобы уловить улучшения.

Тем не менее, тип CLLocationAccuracy задан как удвоение, поэтому я думаю, что справедливо предположить, что kCLLocationAccuracyNearestTenMeters = 10.0, kCLLocationAccuracyHundredMeters = 100.0 и т. Д. Лучшее, вероятно, 0, 1 или kCLLocationAccuracyNearestTenNavigation, и BestF, вероятно, будет. чтобы помочь таким людям, как TomTom и т. д.

Если вы ДЕЙСТВИТЕЛЬНО хотите знать, вы можете распечатать значения - они просто двойные.

Я не верю, что количество спутников или мощность Wi-Fi изменяются в зависимости от желаемой точности. Насколько я понимаю алгоритмы, существует приблизительный расчет: чем больше раз проходит цикл, тем точнее он становится. Следовательно, менее точный просто закладывает раньше.

Но, опять же, более важный момент: это не имеет значения. Apple специально не описывает, что происходит за кулисами, потому что это не часть дизайна. Конструкция такова: если вы используете kCLLocationAccuracyKilometer, вы получите ответ в пределах километра и т. Д. И Apple теперь может изменить способ получения этого ответа без вашего ведома. Подобная изоляция является основным принципом объектно-ориентированного программирования.

РЕДАКТИРОВАТЬ:

ИСПРАВЛЕНИЕ - я только сейчас смотрю сеанс WWDC на месте (сеанс 115), и примерно в 22:00 он рассказывает о том, как при использовании BestForNavigation это добавляет гироскоп. исправление (при наличии). Однако он предупреждает, что, хотя это потребляет много энергии и ресурсов процессора, и должно использоваться только при необходимости, например, с пошаговой навигацией.

Я не уверен, что еще я могу говорить об этом публично, но если вы зарегистрированный разработчик, вы можете получить сеансы из iTunes-U.

(Кстати, это WWDC-2010)

2
ответ дан 27 November 2019 в 20:28
поделиться

Я согласен с Оли, что сокрытие деталей алгоритма призвано защитить разработчика приложения от беспокойства о том, как определяется местоположение. Тем не менее, я считаю, что все еще разумно задавать вопрос: "Каковы энергетические последствия моего выбора точности?".

У меня есть немного информации, которая может помочь вам принять решение о том, какой вариант использовать, но я не знаю истинных деталей реализации Apple.

Во-первых, предположим, что по мере повышения точности показаний системе придется использовать более энергоемкие радиостанции. Например, GPS будет необходим для наиболее точных показаний, в пределах 100 метров, и он потребляет больше всего энергии.

Вот примерное предположение о механизме, используемом для определения точности. Список расположен в порядке (1) с наибольшим расходом батареи.

  1. GPS - kCLLocationAccuracyBestForNavigation;
  2. GPS - kCLLocationAccuracyBest;
  3. GPS - kCLLocationAccuracyNearestTenMeters;
  4. WiFi (или GPS в сельской местности) - kCLLocationAccuracyHundredMeters;
  5. Сотовая вышка - kCLLLocationAccuracyKilometer;
  6. Сотовая вышка - kCLLLocationAccuracyThreeKilometers;

При выборе, Apple рекомендует выбирать наиболее грубую точность, которую может позволить себе ваше приложение.

Надеюсь, это немного поможет.

54
ответ дан 27 November 2019 в 20:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: