Форматы географических данных

Работа с географическими данными валидации в Validator.js опирается на несколько устойчивых форматов представления координат, адресных идентификаторов и региональных кодов. Каждый формат имеет собственные правила записи, диапазоны допустимых значений и типичные ошибки, возникающие при пользовательском вводе или интеграции внешних API.

Наиболее распространённый формат геоданных — пара чисел, представляющих широту и долготу в десятичной системе.

Общий вид:

latitude, longitude

Пример:

51.1694, 71.4491

Диапазоны значений

  • Широта (latitude): от -90 до 90
  • Долгота (longitude): от -180 до 180

Любое отклонение от этих границ считается невалидным с точки зрения географической системы координат.

Проверка через Validator.js

В Validator.js используется метод:

  • isLatLong(value)

Он проверяет строку формата:

"lat,lon"

Особенности поведения:

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

Типичные ошибки

  • использование точки с запятой вместо запятой

  • локализация с запятой как десятичным разделителем:

    51,1694, 71,4491
  • добавление единиц измерения:

    51.1694° N, 71.4491° E

Десятичные координаты как отдельные значения

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

  • isDecimal
  • isFloat
  • кастомная проверка диапазонов

Логика валидации строится в два этапа:

  1. Проверка, что значение — число
  2. Проверка диапазона

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

  • широта:

    -90 <= value <= 90
  • долгота:

    -180 <= value <= 180

Такой подход используется в API, где координаты хранятся в отдельных колонках базы данных.


Географические координаты в формате DMS

Формат DMS (Degrees, Minutes, Seconds):

51°10'9.84"N 71°26'56.76"E

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

  • содержит символы градусов, минут и секунд
  • включает буквенные обозначения сторон света
  • часто используется в картографии и навигации

В Validator.js отсутствует встроенная поддержка DMS. Для проверки применяется:

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

GeoJSON как структурированный формат

GeoJSON используется для описания геометрических объектов.

Пример структуры Point:

{
  "type": "Point",
  "coordinates": [71.4491, 51.1694]
}

Особенность порядка:

  • сначала долгота
  • затем широта

Основные типы:

  • Point
  • LineString
  • Polygon
  • Feature
  • FeatureCollection

Валидация GeoJSON

Validator.js не предоставляет нативной проверки GeoJSON-структур. Используется комбинированный подход:

  • isJSON (проверка валидности JSON-строки)
  • ручная проверка структуры объекта
  • проверка координат через isLatLong или числовые диапазоны

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

  • наличие поля type
  • наличие coordinates
  • соответствие типов массивов
  • проверка вложенности

Почтовые индексы как географический идентификатор

Почтовые индексы часто используются как упрощённая географическая привязка.

В Validator.js применяется:

  • isPostalCode(value, locale)

Примеры локалей:

  • US — 5 или 9 цифр
  • GB — буквенно-цифровой формат
  • CA — канадский формат с пробелом
  • RU — 6 цифр

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

  • строго зависят от страны
  • требуют указания локали
  • не являются геокоординатами, но часто используются для геокодинга

Адресные строки и их неоднозначность

Адреса не имеют единого международного стандарта валидации. Типичный адрес:

ул. Абая 10, Караганда, Казахстан

Проблемы валидации:

  • различия в порядке компонентов
  • разные языковые форматы
  • отсутствие строгой структуры

Validator.js не содержит встроенной функции для проверки адресов.

Используемые подходы:

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

Географические идентификаторы в IP-формате

IP-адреса часто используются как косвенная географическая привязка.

Методы:

  • isIP(value)

Поддерживаются версии:

  • IPv4
  • IPv6

Ограничение: IP не является прямым географическим форматом, но применяется для определения региона через базы геолокации.


Нормализация географических данных

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

  • замена запятых на точки в дробных числах
  • удаление символов градусов (°)
  • удаление буквенных суффиксов (N, S, E, W)
  • обрезка лишних пробелов

Пример нормализации координат:

"51°10'9.84\"N, 71°26'56.76\"E"
→
"51.1694, 71.4491"

Локализация и числовые форматы

Ключевая проблема геоданных — различие десятичного разделителя:

  • в англоязычных форматах используется точка:

    51.1694
  • в части локалей используется запятая:

    51,1694

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


Комбинированная валидация геоданных

В реальных приложениях географические данные редко проверяются одной функцией. Обычно используется цепочка проверок:

  1. Проверка формата строки
  2. Проверка структуры (например, наличие запятой)
  3. Проверка числовых значений
  4. Проверка диапазонов
  5. Дополнительная бизнес-логика (например, принадлежность к региону)

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

  • isLatLong
  • isDecimal для отдельных значений
  • кастомные проверки диапазонов
  • нормализация строки перед проверкой

Практические ограничения валидации

Географические форматы обладают рядом особенностей:

  • высокая вариативность представления
  • зависимость от языка и региона
  • неоднозначность текстовых адресов
  • необходимость согласования с внешними API геокодинга

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