Качество данных

Почему округление координат важнее, чем кажется

Часто можно увидеть, как координаты обрезают до нескольких знаков после запятой перед сохранением или отображением, нередко только ради того, чтобы число выглядело аккуратнее в таблице или в URL. Легко упустить из виду, что каждый знак после запятой в значении широты или долготы соответствует конкретному вычислимому расстоянию на местности, и отбрасывая цифры, вы отбрасываете реальную физическую точность, а не просто визуальный шум.

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

Это становится реальной проблемой в нескольких распространённых ситуациях. Хранение координат в столбце базы данных с недостаточной десятичной точностью незаметно обрезает данные при записи, и ничто в этом сбое не выглядит как ошибка, поскольку получившееся число по-прежнему является корректной координатой, просто менее точной. Передача координат через систему, которая округляет их для отображения, с последующим использованием этого округлённого значения в дальнейших расчётах, например при проверке расстояния или поиске поблизости, переносит исходное округление в каждый последующий результат. Ручное копирование координат между системами, когда человек обрезает цифры, потому что полное значение показалось ему излишне длинным, даёт тот же эффект.

Безопасная привычка состоит в том, чтобы хранить и передавать координаты с десятичной точностью, достаточной для вашего реального сценария, как правило не менее пяти-шести знаков после запятой для всего, что должно оставаться достаточно точным на уровне здания или улицы, и округлять для отображения только на самом последнем шаге перед тем, как показать число человеку, и никогда перед расчётом. Если вам действительно нужно различать только города, округлять раньше вполне допустимо, но это должно быть осознанным решением, основанным на потребностях вашего приложения, а не случайностью, вызванной шириной столбца в базе данных или привычкой форматирования.

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