GPS не очень точен в зданиях, особенно в зданиях со стальным каркасом (что очень распространено в коммерческом строительстве).Ожидается, что даже при хорошей точности «хорошая» точность GPS для мобильного телефона составит около 5 м или больше, чем общее расстояние между этажами.Айфоны используют различные другие методы, такие как позиционирование WiFi, чтобы улучшить это.Мой собственный опыт в разработке заключается в том, что вы часто можете получить точность порядка 3 м.
Но это по горизонтали .Высота имеет тенденцию быть менее точной, чем это, потому что изменения угла крошечные.Если бы вы сказали мне, что ваши измерения были на расстоянии 10 м от вертикали (~ 3 этажа), это бы меня удивило.Звучит так, будто вам нужны дельты (изменение высоты), но даже это очень сложно в здании.
Позиционирование WiFi является важной частью этой истории.Google и Apple (и другие) делают тонну корреляции между информацией GPS и информацией WiFi.Когда пользователи используют свои картографические продукты, они узнают о многочисленных точках доступа WiFi.Они соотносят информацию от точки доступа (например, уровень сигнала RSSI) с информацией GPS от миллионов телефонов и используют ее для определения местоположения точек доступа и используют ее для создания более точной информации о местоположении, особенно внутри.(Помните, что спутники GPS находятся на расстоянии около 20 000 км, и вы окружили себя гигантской металлической коробкой. Они делают все возможное.) Обеспечение наличия стабильных точек доступа Wi-Fi на всей территории (и на различныхэтажей) должно со временем помочь системе освоить ваше зданиеК сожалению, это не очень надежное решение.
Краткий ответ этого очень длинного ответа состоит в том, что способ улучшения информации о местоположении состоит в том, чтобы взять много чтений и усреднить их, компенсируя инерциальную (ускоренную) информацию дляиметь дело с движением.ОС уже делает это, но вы можете продолжать усреднять больше точек данных (как местоположения, так и скорости), чтобы попытаться получить большую точность с течением времени.
И, конечно же, используйте настолько высокую точность определения местоположения, насколько вы можете избежать,kCLLocationAccuracyBest
- это, как правило, лучшее, что вы можете получить без подключения (это, конечно, мощная свинья, поэтому вы не можете запускать ее постоянно).Если у вас есть внешнее питание, вы можете использовать kCLLocationAccuracyBestForNavigation
.
В противном случае вам просто нужно будет усреднить множество измерений, чтобы решить, когда вы считаете, что действительно изменили полы.