Обработка ошибок

Автор: Евгений Рыжков и Татьяна Головко Дата публикации: 25.03.2011

Геолокация — это сложно. Так много всего может пойти не так. Я уже упоминал об одной проблеме — подтверждение пользователем. Если твоему приложению нужны координаты юзера ,а он не хочет их сообщать — ты в пролете. Тут пользователь всегда побеждает. Но как это предусмотреть в коде? Похоже, потребуется второй аргумент для функции getCurrentPosition() для вызова обработчика ошибок:

navigator.geolocation.getCurrentPosition(show_map, handle_error)

Если что-то пойдет не так, будет вызвана функция обработки ошибок с объектом PositionError, у которого имеются следующие свойства:

Свойство Тип Примечания
code short пронумерованные значения
message DOMString не предназначен для конечных пользователей

Свойство code принимает одно из следующих значений:

  • PERMISSION_DENIED (1) — когда пользователь не разрешает определение месторасположения;
  • POSITION_UNAVAILABLE (2) — если перебои с сетью или нет связи со спутником;
  • TIMEOUT (3) — если сеть работает плохо и на вычисление координат пользователя уходит слишком много времени. Что значит «слишком много»? Об этом расскажу позже;
  • UNKNOWN_ERROR (0) — какая-либо другая ошибка.

Пример :

function handle_error(err) {
	if (err.code == 1) {
	// Пользователь не разрешил определение координат!
	}
}

В: Будет ли работать Geolocation API на Международной космической станции, на Луне или других планетах?

О: Спецификации по Geoloction API говорят: «для определения месторасположения используется интерфейс World Geodetic System (2d) [WGS84]. Другие системы не поддерживаются». В принципе, находясь на космической орбитальной станции космонавты могут определить свои координаты. Но нужно понимать, что World Geodetic System — это система ориентированная на планету Земля. Потому корректно работать за ее пределами Geolocation API не будет.

Куда дальше