быстрая высота в помещении не точная - PullRequest
1 голос
/ 21 марта 2019

Я пытаюсь собрать высоту моего пользователя, когда он поднимается и опускается в здание, в котором он находится. Я использовал guard let lastLocation = locations.last else {return} let altitude = lastLocation.altitude, чтобы собрать высоту с помощью CoreLocation, но высота кажется очень неточной.Кто-нибудь знает способы более точного сбора этой информации?

1 Ответ

1 голос
/ 22 марта 2019

GPS не очень точен в зданиях, особенно в зданиях со стальным каркасом (что очень распространено в коммерческом строительстве).Ожидается, что даже при хорошей точности «хорошая» точность GPS для мобильного телефона составит около 5 м или больше, чем общее расстояние между этажами.Айфоны используют различные другие методы, такие как позиционирование WiFi, чтобы улучшить это.Мой собственный опыт в разработке заключается в том, что вы часто можете получить точность порядка 3 м.

Но это по горизонтали .Высота имеет тенденцию быть менее точной, чем это, потому что изменения угла крошечные.Если бы вы сказали мне, что ваши измерения были на расстоянии 10 м от вертикали (~ 3 этажа), это бы меня удивило.Звучит так, будто вам нужны дельты (изменение высоты), но даже это очень сложно в здании.

Позиционирование WiFi является важной частью этой истории.Google и Apple (и другие) делают тонну корреляции между информацией GPS и информацией WiFi.Когда пользователи используют свои картографические продукты, они узнают о многочисленных точках доступа WiFi.Они соотносят информацию от точки доступа (например, уровень сигнала RSSI) с информацией GPS от миллионов телефонов и используют ее для определения местоположения точек доступа и используют ее для создания более точной информации о местоположении, особенно внутри.(Помните, что спутники GPS находятся на расстоянии около 20 000 км, и вы окружили себя гигантской металлической коробкой. Они делают все возможное.) Обеспечение наличия стабильных точек доступа Wi-Fi на всей территории (и на различныхэтажей) должно со временем помочь системе освоить ваше зданиеК сожалению, это не очень надежное решение.

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

И, конечно же, используйте настолько высокую точность определения местоположения, насколько вы можете избежать,kCLLocationAccuracyBest - это, как правило, лучшее, что вы можете получить без подключения (это, конечно, мощная свинья, поэтому вы не можете запускать ее постоянно).Если у вас есть внешнее питание, вы можете использовать kCLLocationAccuracyBestForNavigation.

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

...