CoreLocation не человек и не знает, где вы «на самом деле», это суть ответа на ваш вопрос. Он использует датчики на вашем устройстве и дает вам лучший ответ, который у него есть, а проблемы с его способностью знать точность заявленного ответа отражают, что проблема местоположения по своей сути очень сложна.
Чтобы перейти к самим данным о местоположении: CoreLocation извлекает данные из триангуляции вышек сотовой связи, близлежащих идентификаторов SSID и, наконец, GPS, чтобы определить местоположение устройства. Они имеют разную степень точности, но их объединяет то, что если вы дадите устройству работать дольше, вы получите более точный ответ. Однако, поскольку все инструменты, которые использует CoreLocation, дороги с точки зрения времени автономной работы, он прекратит работу, как только получит ответ, который соответствует вашим критериям «достаточно хорошо».
Вот почему другой ответ велел вам установить желаемую точность на kCLLocationAccuracyBestForNavigation
- когда вы это делаете, вы в основном говорите CoreLocation «покажите мне лучшее, что у вас есть», и вы Мы также добровольно вызвались нагрузкой на процессор, временем и расходом батареи. Вы также вышли за пределы обычной шкалы, которую использует CoreLocation, чтобы выяснить, что является «достаточно хорошим» - вместо того, чтобы заранее сказать, когда он может остановиться, вы в основном сказали: «Я скажу вам, когда это будет достаточно хорошо».
Таким образом, CoreLocation будет пытаться дать вам лучшие ответы, пока вы не скажете, что все готово, и вам нужно будет выполнить свою ответственность за принятие решения, что это за точка. Здесь также необходимо помнить о том, что существуют пределы того, насколько точными могут быть инструменты в репертуаре CoreLocation - вы можете получить много значительных цифр широты и долготы, но рискуя отойти от шкалы, Вы вызвались для выяснения, насколько эти цифры заслуживают доверия. Предопределенные шкалы точности составляют 10 метров, 100 метров, 1 км и 3 км. Тот факт, что создатели CoreLocation выбрали эти точки отсечения, должен сказать вам кое-что о сложности проблемы - если бы лучшая точность была легкой, она, вероятно, уже была бы в структуре.
Итак, оборачиваясь назад: CoreLocation достоверно сообщает о точности своих ответов, просто данные, лежащие в основе этого ответа, проблематичны, и если бы он знал больше о точности своих требований о точности, он бы отражал это в своих заявлениях о точности , Рассмотрим гипотетическую ситуацию, когда CoreLocation точно знает, насколько точны ее утверждения о точности, а затем ситуацию, когда CoreLocation ничего не знает о том, насколько точны его утверждения о точности, и рассмотрим, как можно разработать API для учета этой проблемы. CoreLocation уверен в том, насколько он может быть разумным, и если вы можете придумать способ, которым можно быть уверенным в том, насколько вы уверены, то в App Store вас ждет богатство App Store вы.