Проверка широты и долготы

Географические координаты представляют собой числовую систему, позволяющую однозначно определить положение точки на поверхности Земли. В большинстве прикладных задач используются два значения: широта и долгота. Корректность этих значений критична для геокодирования, работы с картами, маршрутизации и хранения геоданных.

При валидации координат необходимо учитывать не только диапазоны чисел, но и формат представления, допустимые разделители, наличие пробелов, знаки и локальные особенности записи.


Формат широты

Широта (latitude) определяет положение точки относительно экватора.

Допустимый диапазон:

  • от -90 до 90

Особенности:

  • 0 — экватор
  • положительные значения — северное полушарие
  • отрицательные значения — южное полушарие

Примеры корректных значений:

  • 55.7558
  • -33.9249
  • 0

Ошибочные значения:

  • 91
  • -91
  • “N55” (без числового формата)

Формат долготы

Долгота (longitude) определяет положение точки относительно нулевого меридиана.

Допустимый диапазон:

  • от -180 до 180

Особенности:

  • 0 — Гринвичский меридиан
  • положительные значения — восточное полушарие
  • отрицательные значения — западное полушарие

Примеры корректных значений:

  • 37.6173
  • -0.1276
  • 180

Ошибочные значения:

  • 181
  • -181
  • “E37” (некорректный формат)

Валидация в Validator.js: isLatLong

Библиотека Validator.js предоставляет метод isLatLong, предназначенный для проверки строкового представления пары координат.

Функция проверяет строку вида:

  • "lat,lon"
  • "lat, lon"

Пример использования:

const validator = require('validator');

validator.isLatLong('55.7558,37.6173'); // true
validator.isLatLong('-33.9249, 18.4241'); // true
validator.isLatLong('91, 0'); // false

Особенности работы isLatLong

  • ожидает строковый ввод
  • проверяет диапазоны широты и долготы
  • допускает пробел после запятой
  • не принимает массивы или объекты
  • не выполняет глубокую нормализацию входных данных

isLatitude и isLongitude

Для более точечной валидации используются отдельные функции:

isLatitude

Проверяет, является ли значение корректной широтой.

validator.isLatitude('55.7558'); // true
validator.isLatitude('91'); // false

isLongitude

Проверяет корректность долготы.

validator.isLongitude('37.6173'); // true
validator.isLongitude('181'); // false

Эти методы полезны, когда координаты хранятся отдельно, а не в паре.


Пограничные значения и особенности проверки

При работе с геокоординатами особое внимание уделяется граничным случаям.

Корректные крайние значения:

  • широта: -90 и 90
  • долгота: -180 и 180

Некоторые системы координат могут трактовать значения на границе по-разному, однако Validator.js придерживается строгой математической проверки.

Особые случаи:

  • 90.0000 — допустимо
  • -90.0001 — недопустимо
  • 180.0000 — допустимо
  • 180.0001 — недопустимо

Строковые форматы и нормализация

В реальных данных координаты часто приходят в неидеальном формате:

  • лишние пробелы: " 55.7558 , 37.6173 "
  • табуляции или переносы строк
  • альтернативные разделители (точка с запятой, слэш)
  • локализация с запятой как десятичным разделителем

Validator.js не выполняет автоматическое приведение таких данных к нормализованному виду.

Перед валидацией часто требуется предварительная обработка:

  • удаление пробелов по краям (trim)
  • замена нестандартных разделителей
  • приведение десятичного разделителя к точке

Частые ошибки при валидации координат

Передача чисел вместо строк

validator.isLatLong(55.7558, 37.6173); // некорректное использование

Метод ожидает одну строку.


Использование локального формата

'55,7558, 37,6173'

Ошибка возникает из-за двусмысленности запятых.


Перепутанные значения

'180, 90' // логически допустимо как числа, но некорректная структура координат

Validator.js не проверяет географическую осмысленность, только диапазоны.


Комбинирование правил валидации

В прикладных сценариях часто требуется более строгая проверка, чем предоставляет один метод.

Пример комбинированной проверки:

validator.isFloat(lat, { min: -90, max: 90 }) &&
validator.isFloat(lon, { min: -180, max: 180 })

Или предварительное разделение строки:

const [lat, lon] = value.split(',');

validator.isFloat(lat.trim()) &&
validator.isFloat(lon.trim())

Кастомная валидация координат

Для сложных систем часто создаются собственные правила поверх Validator.js.

Пример логики:

  • проверка формата строки
  • разбиение на компоненты
  • проверка диапазонов
  • дополнительная проверка на NaN
  • контроль точности (количество знаков после запятой)

Пример подхода:

function isValidCoordinates(value) {
  if (!validator.isLatLong(value)) return false;

  const [lat, lon] = value.split(',');

  return (
    validator.isFloat(lat.trim(), { min: -90, max: 90 }) &&
    validator.isFloat(lon.trim(), { min: -180, max: 180 })
  );
}

Работа с API и внешними источниками данных

Геоданные часто поступают из сторонних сервисов:

  • карты
  • геокодеры
  • IoT-устройства
  • мобильные приложения

Типичные проблемы:

  • координаты в виде чисел, а не строк
  • потеря точности при сериализации
  • некорректные null-значения
  • смешение форматов (WGS84, локальные системы координат)

Validator.js в таких случаях используется как слой первичной защиты данных, но не как полноценная геодезическая система проверки.


Производительность валидации координат

Проверка широты и долготы относится к лёгким операциям:

  • отсутствие тяжёлых вычислений
  • отсутствие обращений к внешним ресурсам
  • линейная сложность O(1)

Однако при массовой обработке (например, миллионы точек) важна минимизация:

  • лишних преобразований строк
  • повторной проверки одинаковых значений
  • каскадной валидации без необходимости

Особенности использования в различных сценариях

Геолокационные сервисы

Требуется строгая проверка диапазонов и формата, так как ошибки приводят к неверному позиционированию.

Карты и маршрутизация

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

Хранение в базе данных

Часто используется дополнительная схема:

  • тип DECIMAL
  • ограничения на уровне БД
  • повторная проверка в приложении через Validator.js

Ограничения Validator.js при работе с координатами

Несмотря на удобство, библиотека не решает ряд задач:

  • не интерпретирует географические системы координат
  • не проверяет корректность пары как точки на карте
  • не учитывает высоту (altitude)
  • не работает с форматом DMS (градусы, минуты, секунды)

Поэтому isLatLong и связанные методы следует рассматривать как инструмент синтаксической и диапазонной проверки, а не как географический анализатор.