Что браузер знает о том, где вы находитесь
Как работает браузерный Geolocation API, что означает каждое поле ответа и почему точность колеблется от нескольких метров до нескольких километров.
Нажимаете «поделиться местоположением» на сайте с картой — и если вам когда-нибудь было интересно, что происходит дальше, ответ такой: одна браузерная функция getCurrentPosition. Она спрашивает у вас разрешение, а потом возвращает небольшой набор чисел. Моё местоположение делает ровно это и показывает весь набор без правок.
Откуда берутся эти числа
У браузера нет собственного GPS-чипа. Он опирается на то, что предлагает устройство, и смешивает сигналы.
На телефоне это настоящий GPS плюс ближайшие сети Wi-Fi и вышки сотовой связи для ускорения. На ноутбуке без GPS это в основном запрос: браузер отправляет список видимых точек Wi-Fi в сервис геолокации (обычно Google или Apple) и получает в ответ наиболее вероятную догадку. Когда есть только IP-адрес, всё сводится к грубой оценке на уровне города.
Вот почему один и тот же инструмент ставит телефон на нужный перекрёсток, а десктоп — куда-то на другой конец города.
Как читать ответ
Самое интересное — поле accuracy. Это не украшение. Это радиус в метрах вокруг указанной точки: вероятность того, что вы внутри этого круга, около 68%. Телефон на улице может показать 5 метров. Мой десктоп по офисному Wi-Fi однажды показал 2400. Один и тот же API, совершенно разная уверенность — и число подсказывает, чему верить.
Некоторые поля часто пустые, и это нормально:
- Высота требует настоящего GPS. Позиционирование по Wi-Fi высоту измерить не может, поэтому возвращается null.
- Направление и скорость появляются, только когда вы двигаетесь с включённым непрерывным отслеживанием. Сидите неподвижно за столом — остаются null.
- Точность высоты появляется лишь вместе с самой высотой.
Увидеть тут null — не ошибка. Это браузер честно признаёт, что не знает.
Зачем показывать сырой объект
Я сделал показ сырого ответа, потому что всё равно постоянно лез в консоль его проверять. Если вы прикручиваете карту, поиск магазинов или функцию «найти рядом со мной», удобно увидеть точную форму ответа браузера до того, как писать под неё код. Скопировали, вставили в тест — готово.
Это ещё и отрезвляет. Люди думают, что геолокация точна, потому что их приложение с картой ощущается точным. Увидеть на ноутбуке точность «1,8 км» — быстрый урок о том, почему поиск магазинов иногда отправляет вас не в тот филиал.
Про разрешение и приватность
Ничего не произойдёт, пока вы не нажмёте кнопку и не подтвердите запрос. Это встроено в сам API, сайт это не обойдёт. И браузеры разрешают геолокацию только по HTTPS, так что обычная страница на http:// выдаст ошибку доступа ещё до запроса.
Скажу прямо: этот инструмент считывает координаты в браузере и показывает их. В belun.app они не отправляются. Единственный момент, когда местоположение покидает страницу, — если вы нажмёте ссылку на карту, которая открывает OpenStreetMap с этими координатами в адресе.
Если нужна грубая версия без разрешений, Определение IP-адреса угадает ваш город по сети. А для точной версии откройте Моё местоположение и посмотрите, что на самом деле сообщает ваш браузер.