Географические координаты представляют собой числовую систему, позволяющую однозначно определить положение точки на поверхности Земли. В большинстве прикладных задач используются два значения: широта и долгота. Корректность этих значений критична для геокодирования, работы с картами, маршрутизации и хранения геоданных.
При валидации координат необходимо учитывать не только диапазоны чисел, но и формат представления, допустимые разделители, наличие пробелов, знаки и локальные особенности записи.
Широта (latitude) определяет положение точки относительно экватора.
Допустимый диапазон:
Особенности:
Примеры корректных значений:
Ошибочные значения:
Долгота (longitude) определяет положение точки относительно нулевого меридиана.
Допустимый диапазон:
Особенности:
Примеры корректных значений:
Ошибочные значения:
Библиотека 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
Для более точечной валидации используются отдельные функции:
Проверяет, является ли значение корректной широтой.
validator.isLatitude('55.7558'); // true
validator.isLatitude('91'); // false
Проверяет корректность долготы.
validator.isLongitude('37.6173'); // true
validator.isLongitude('181'); // false
Эти методы полезны, когда координаты хранятся отдельно, а не в паре.
При работе с геокоординатами особое внимание уделяется граничным случаям.
Корректные крайние значения:
Некоторые системы координат могут трактовать значения на границе по-разному, однако 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.
Пример логики:
Пример подхода:
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 })
);
}
Геоданные часто поступают из сторонних сервисов:
Типичные проблемы:
Validator.js в таких случаях используется как слой первичной защиты данных, но не как полноценная геодезическая система проверки.
Проверка широты и долготы относится к лёгким операциям:
Однако при массовой обработке (например, миллионы точек) важна минимизация:
Требуется строгая проверка диапазонов и формата, так как ошибки приводят к неверному позиционированию.
Координаты должны быть не только валидными, но и логически корректными (например, точки маршрута должны быть достижимыми).
Часто используется дополнительная схема:
DECIMALНесмотря на удобство, библиотека не решает ряд задач:
Поэтому isLatLong и связанные методы следует
рассматривать как инструмент синтаксической и диапазонной проверки, а не
как географический анализатор.