Наверняка вам известна функция navigator.geolocation.getCurrentPosition(). Она позволяет определить текущие GPS координаты при наличии на устройстве GPS. Все прекрасно работает до тех пор, пока вам не особо важна точность. Как только вам становится критичной погрешность в лишние 50м, то начинается гугление.
Так была найдена библиотека getAccurateCurrentPosition.
По сути это один JS файл, который добавляет метод getAccurateCurrentPosition в стандартный объекта navigation.geolocation. Суть метода заключается в последовательном получении GPS координат для выявления более точного результата.
Использование не отличается от стандартного метода. Например так:
navigator.geolocation.getAccurateCurrentPosition(onSuccess, onError, onProgress, {desiredAccuracy:20, maxWait:15000});
Теперь, как видите, у нас появился новый каллбек onProgress. Он нужен для отслеживания прогресса получения координат, т.к. время их получения существенно увеличивается. Но при этом увеличивается и точность. Например, на THL W3+ точность достигает 30м, а на iPhone4 - 65м внутри помещения, что позволяет реализовать хоть какую-то навигацию в малых масштабах или даже внутри здания.