Разумный промежуток времени, чтобы определить местоположение пользователя iPhone - PullRequest
2 голосов
/ 04 августа 2009

Я пишу приложение на основе определения местоположения, и в настоящее время у меня есть iPhone первого поколения, но мне интересно, сколько времени понадобится iPhone 3G или 3Gs, чтобы определить его местоположение с помощью чипа GPS?

Насколько я понимаю, locationManager: didUpdateToLocation: fromLocation: может получать вызовы с более точной информацией о местоположении (нет никаких гарантий). Поэтому я хотел бы создать таймер, который, если местоположение пользователя не будет определено, скажем, временем x, тогда мы просто перестанем пытаться определить его и перейдем к тому, что имеем.

Кроме того, есть ли способ узнать, есть ли у устройства чип GPS или нет? Я знаю, что могу просто посмотреть тип устройства в UIDevice и расстаться между сенсорным и iphone, но как насчет iPhone без GPS и с GPS?

Спасибо!

Ответы [ 3 ]

1 голос
/ 04 августа 2009

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

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

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

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

1 голос
/ 04 августа 2009

Для вашего последнего ответа я бы указал вам на этот ТАК вопрос . В зависимости от того, есть ли у него iPhone1,1 или iPhone1,2, вы можете определить, есть ли у него GPS-чип или нет.

Что касается первой части вашего вопроса, я могу рассказать вам, как я это сделал в своем заявлении. Я запускаю два таймера, скажем, shortTimer и longTimer, которые оба вызывают один и тот же метод обратного вызова. Метод обратного вызова ожидает, пока оба таймера сработают, и только после этого продолжает выполнять какую-то другую работу. Сразу после запуска таймеров я начинаю прослушивать обновления местоположения. Если местоположение, полученное в методе locationManager: didUpdateToLocation: fromLocation, является недавним и достаточно точным, я запускаю длинный таймер преждевременно (т.е. до того, как он сам запустится).

Таким образом, я жду, по крайней мере, тайм-аут shortTimer для недавнего и точного местоположения, и самое большее для тайм-аута longTimer. Разумные значения для тех? Эксперимент немного скажу. Поскольку у меня есть заставка с логотипом компании, прежде чем продолжить, у меня shortTimer довольно длинный (то есть 4 секунды). Мой longTimer установлен на 20 секунд. Кажется, это работает для меня.

НТН

0 голосов
/ 04 августа 2009

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

Что касается того, является ли устройство iPhone с GPS или нет - CoreLocation разработан, чтобы дать вам такой ответ, не зная / не заботясь. Хотели бы вы получить лучшее доступное местоположение, если установлен GPS? Если это так, перейдите с помощью kCLLocationAccuracyBest, и вы получите самые точные обновления, которые будет поддерживать устройство.

Если вы получите блокировку GPS, ваша точность (измеренная с помощью горизонтальной точности) будет менее 10 м. Что-нибудь большее, и у вас нет блокировки GPS, или, по крайней мере, не очень хороший.

Вы также обнаружите, что вертикальная точность будет присутствовать на устройстве с поддержкой GPS, а не на устройстве без GPS.

...