неточная высота swift в помещении

#swift #core-location

#swift #местоположение ядра

Вопрос:

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

Комментарии:

1. Можете ли вы показать код, в котором вы назначаете locations

Ответ №1:

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

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

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

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

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

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