Подтвердить что ты не робот

Декодирование CLLocationAccuracy const

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

extern const CLLocationAccuracy kCLLocationAccuracyBestForNavigation;
extern const CLLocationAccuracy kCLLocationAccuracyBest;
extern const CLLocationAccuracy kCLLocationAccuracyNearestTenMeters;
extern const CLLocationAccuracy kCLLocationAccuracyHundredMeters;
extern const CLLocationAccuracy kCLLocationAccuracyKilometer;
extern const CLLocationAccuracy kCLLocationAccuracyThreeKilometers;

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

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

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

что я действительно хочу знать, что на самом деле происходит с kCLLocationAccuracyThreeKilometers относительно батареи - это gps? 1 салфетка? Wi-Fi включен? Wi-Fi на таймере? кто знает? Я знаю, что хочу -

4b9b3361

Ответ 1

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

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

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

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

  • GPS - kCLLocationAccuracyBestForNavigation;
  • GPS - kCLLocationAccuracyBest;
  • GPS - kCLLocationAccuracyNearestTenMeters;
  • WiFi (или GPS в сельской местности) - kCLLocationAccuracyHundredMeters;
  • Cell Tower - kCLLocationAccuracyKilometer;
  • Cell Tower - kCLLocationAccuracyThreeKilometers;

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

Надеюсь, что это поможет, a.little.

Ответ 2

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

GPS не работает очень хорошо в помещении, и может потребоваться очень много времени, чтобы получить какое-либо исправление без помощи ячеистой камеры (возможно, 20 минут!). Для того, чтобы спутники транслировали достаточно информации для определения вашего местоположения, требуется много времени, и может быть потеря пакетов (облака, здания, деревья, горы и т.д.). Стоит отметить, что у надлежащего высокого уровня GPS будет антенна размером с мяч для корзины, никакой ручной GPS не сможет получить идеальный сигнал.

Даже на открытом воздухе с идеальным сигналом, GPS неточен при быстром изменении направления (например, на шоссе или ветреной дороге). В настройке BestForNavigation используется акселерометр и гироскоп, чтобы компенсировать это.

В настоящее время платформа iOS использует:

  • GPS: очень точная, но высокая мощность, медленная и не всегда доступна. некоторые аппаратные средства не имеют GPS.
  • WiFi: много мощности, и работает только в городе. Также может быть ошибочным (например, поместите вас в неправильный город).
  • Сотовая башня: почти нет ни одной силы, и хорошо работает в городе. Не так велико в сельской местности. Не существует на каком-то оборудовании.
  • Акселерометр: небольшие улучшения в других исправлениях местоположения, но огромная мощность.
  • Гироскоп: небольшие улучшения в других исправлениях местоположения, но огромная мощность. iPhone 4.

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

Ответ 3

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

Сказано, что CLLocationAccuracy typedef-ed удваивается, поэтому я думаю, что справедливо предположить, что kCLLocationAccuracyNearestTenMeters = 10.0, kCLLocationAccuracyHundredMeters = 100.0 и т.д. Лучшим может быть либо 0, 1, либо kCLLocationAccuracyNearestTenMeters, а BestForNavigation - это, вероятно, тот, который они бросили для помощи таким людям, как TomTom и т.д.

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

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

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

ИЗМЕНИТЬ:

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

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

(Это WWDC-2010, кстати.)