Декодирование константы 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 должна была предоставить -

что я действительно хочу знать, так это то, что на самом деле происходит с kCLLocationAccuracyThreeKilometers в отношении расхода батареи - включен ли GPS? 1 сидячий багажник? вайфай включен? вайфай по таймеру? кто знает? я знаю, что хотел бы


person dave    schedule 05.08.2010    source источник


Ответы (3)


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

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

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

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

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

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

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

person Andrew Little    schedule 11.08.2010
comment
Согласно документации Apple: kCLLocationAccuracyBestForNavigation Используйте максимально возможную точность и комбинируйте ее с дополнительными данными датчиков. Этот уровень точности предназначен для использования в навигационных приложениях, которые требуют точной информации о местоположении в любое время и предназначены для использования только тогда, когда устройство подключено к сети. Это единственная константа с любым описанием, относящимся к использованию датчика/питания. - person Brody Robertson; 18.02.2013
comment
kCLLocationAccuracyBestForNavigation дает лучшие точки местоположения, чем kCLLocationAccuracyBest? заставляет ли это вас быть рядом с дорогой? Потому что большинство навигационных программ предназначено для навигации в автомобильном/автобусном транспорте. Могу ли я получить более точные координаты местоположения, если буду использовать kCLLocationAccuracyBest вместо kCLLocationAccuracyBestForNavigation? - person Itay Levin; 29.05.2013
comment
Я думаю, можно с уверенностью предположить, что даже в худшем случае kCLLocationAccuracyBestForNavigation не уступает kCLLocationAccuracyBest. - person livings124; 24.07.2014
comment
@Andrew Little Это отличное описание, и оно мне очень помогает. Спасибо за этот пост. Это спасает мои дни. - person The iOSDev; 13.03.2015
comment
на основании этого исследования ваш ответ кажется частично неправильно. То есть Wi-Fi (или GPS в сельской местности) рассчитан не на kCLLocationAccuracyСтометров, а на kCLLocationAccuracyNearestДесятьметров. Для kCLLocationAccuracyHundredMeters это в основном Wi-Fi и CellTower. - person Honey; 01.08.2017
comment
Что касается разницы между kCLLocationAccuracyKilometer и kCLLocationAccuracyThreeKilometer, я спросил эксперта, он сказал, что, вероятно, вопрос в том, сколько вышек нужно изучить и как часто искать обновления, например. с kCLLocationAccuracyThreeKilometer мы можем просматривать 1-2 башни каждые 5-6 минут, но с kCLLocationAccuracyKilometer мы можем просматривать 3-4 башни, чтобы получить лучшую триангуляцию и проверять каждые 2 минуты, поэтому убедитесь, что мы не пропускаем порог в 1 км. . Вероятно, на интервал между проверками влияет скорость, т.е. если вы едете быстро, то проверка будет происходить каждые 1-2 минуты. - person Honey; 01.08.2017
comment
Что мне выбрать, если я создаю приложение для спидометра? - person Yaroslav Dukal; 16.06.2018
comment
Кроме того, когда вы используете вышки сотовой связи, иногда из-за того, что вышка занята, вам, возможно, придется использовать вышку, которая находится дальше от вас. В результате вычисленное вами местоположение будет неточным, поскольку оно ошибочно считает, что вы ближе к не-ближе башне! - person Honey; 30.09.2018

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

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

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

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

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

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

person Abhi Beckert    schedule 11.04.2011
comment
В чем разница между высоким энергопотреблением, большим энергопотреблением и огромным энергопотреблением. ржу не могу. - person mskw; 02.11.2012
comment
@mskw Триангуляция WiFi/GSM потребляет очень мало энергии. GPS потребляет довольно много энергии. GPS с коррекцией акселератора/гироскопа требует много математических вычислений и сильно нагружает ЦП, поэтому энергопотребление является экстремальным. - person Abhi Beckert; 03.11.2012
comment
› В деловом районе крупного города и Wi-Fi, и триангуляция вышек сотовой связи работают очень хорошо. @Abhi Beckert, я не уверен в этом. Что касается Wi-Fi, вы, вероятно, правы, но я получаю довольно плохую точность (сотни метров) внутри зданий здесь, в Ист-Виллидж на Манхэттене, когда Wi-Fi был отключен на некоторое время. (Я предполагаю, что в этой ситуации используются вышки сотовой связи). У меня также была довольно плохая точность в центре Сиэтла (более 1000 метров), внутри зданий. - person Brennan Vincent; 26.04.2016
comment
@BrennanVincent Я в основном имел в виду торговые центры / вокзалы / и т. Д., В которых часто есть десятки вышек сотовой связи внутри здания. Не во всех зданиях они есть, тем более что частоты некоторых сотовых сетей могут эффективно проходить сквозь стены, что устраняет необходимость во внутренних ячейках. Также прилично 1000 метров - в сельской местности точность триангуляции сотовой сети может достигать 300 000 метров. - person Abhi Beckert; 27.04.2016
comment
если вы используете что-то вроде: kCLLocationAccuracyHundredMeters т.е. используете триангуляцию WiFi, что тогда происходит, когда вы находитесь в удаленном районе? Будет ли это переход на GPS и разрядка батареи или вышек сотовой связи с ухудшением точности? И что вы имеете в виду под сотовой вышкой: почти не потребляет энергии и хорошо работает в городе. В сельской местности не очень. Не существует на некоторых аппаратных средствах. Вы имеете в виду, что не каждая вышка сотовой связи имеет аппаратное обеспечение, необходимое для триангуляции? - person Honey; 18.08.2018

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

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

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

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

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

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

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

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

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

person Olie    schedule 11.08.2010
comment
Также обратите внимание, наряду с комментарием Литтла, г-н WWDC говорит, что сотовая вышка только без подключения для передачи данных (как при роуминге без тарифного плана) имеет точность 10-50 км. Подобно коду города, укажите конкретный номер с точки зрения местоположения. - person Olie; 12.08.2010
comment
Я помню, как узнал, что kCLLocationAccuracyBest на самом деле равен -1, просто к вашему сведению. Спасибо за ответ. - person hatunike; 20.08.2013
comment
@hatunike Согласно официальной документации developer.apple .com/library/mac/documentation/CoreLocation/ horizontalAccuracy: отрицательное значение означает, что широта и долгота местоположения недействительны. - person der_michael; 01.02.2014