Геодезический калькулятор, пишем на Python


 

Введение и цели

Коротко: в этой статье мы шаг за шагом создадим полноценный геодезический калькулятор на Python без внешних библиотек. Он умеет считать расстояния и азимуты по эллипсоиду WGS84 (алгоритм Винценти), строить прямую геодезическую задачу, конвертировать координаты между широтой/долготой/высотой (LLA) и правой прямоугольной системой (ECEF), переходить к локальным координатам ENU, вычислять площадь сферического полигона, а также выполнять полезные преобразования формата координат (DMS↔DD). Мы разберём математику, архитектуру кода, тесты и типичные ловушки практики.

Требования: Python 3.8+, любые ОС. Сам калькулятор не требует внешних модулей. Все исходники и иллюстрации можно скачать по ссылкам ниже.


Базовые понятия геодезии

Почему эллипсоид? Земля не идеальный шар. Для точного позиционирования используют референсный эллипсоид вращения WGS84. Он задаётся большой полуосью a, сжатием f и малой полуосью b=a·(1−f), а также эксцентриситетом e²=f·(2−f).

Геодезическая линия — кратчайшая на поверхности эллипсоида. Для точных расчётов применим метод Винценти.

Системы координат: LLA (φ,λ,h), ECEF (X,Y,Z) — геоцентрическая, и локальная ENU (East, North, Up).

Параметр Обозначение Значение Ед.
Большая полуось a 6378137.0 м
Сжатие f 1/298.257223563
Малая полуось b = a·(1−f) 6356752.314245 м
Первый эксцентриситет² e² = f·(2−f) 0.006694379990

Геодезическая на эллипсоиде: Винценти

Обратная задача Винценти:

  1. U₁=atan((1−f)·tanφ₁), U₂=atan((1−f)·tanφ₂).
  2. Итерируем λ до сходимости.
  3. Вычисляем σ, α, cos2σₘ; корректируем через u², A(u²), B(u²).
  4. s = b·A·(σ − Δσ), азимуты — из производных формул.

Форматы координат DMS↔DD

DMS↔DD. Реализуем универсальный парсер и форматер с поддержкой °′″, разделителей и N/S/E/W.


Преобразования LLA↔ECEF

LLA↔ECEF. X=(N+h)cosφcosλ, Y=(N+h)cosφsinλ, Z=(N(1−e²)+h)sinφ; обратное — итерация по φ до стабилизации.


Локальная система ENU

ECEF→ENU. Переносим начало в опорную точку и поворачиваем оси по φ₀,λ₀. Получаем (E,N,U) — удобно в инженерной практике.


Площадь полигона на сфере

Площадь на сфере. Суммируем "углы поворота" по рёбрам через atan2. Подходит для оценок, когда эллипсоидная точность не требуется.


Иллюстрации

Сечение эллипсоида WGS84
Рис. 1. Эллипсоид.
Азимуты
Рис. 2. Азимуты.
ECEF/ENU
Рис. 3. Системы координат.

Примеры и сверка результатов

From To Lat,Lon (deg) Lat,Lon (deg) Distance (m) Init Az (°) Final Az (°)
Athens Moscow 37.9838, 23.7275 55.7558, 37.6173 2,288,167.3 26.829 204.648
Athens New York 37.9838, 23.7275 40.7128, -74.0060 7,927,170.8 300.036 100.803
Tokyo Sydney 35.6895, 139.6917 -33.8688, 151.2093 7,816,588.0 157.653 20.913
Quito New York -0.1807, -78.4678 40.7128, -74.0060 4,523,557.2 20.612 197.897
Cape Town Rio de Janeiro -33.9249, 18.4241 -22.9068, -43.1729 6,095,321.9 297.011 92.105
Moscow Tokyo 55.7558, 37.6173 35.6895, 139.6917 7,481,335.6 69.771 276.848
Sydney Rio de Janeiro -33.8688, 151.2093 -22.9068, -43.1729 13,330,649.9 142.472 312.370

Командная строка и сценарии использования

CLI. Подкоманды: distance, direct, dms2dd, dd2dms, lla2ecef, ecef2lla, enu, area. Примеры использования приведены в тексте.


Исходники

 

Тестирование и валидация

Тесты. Проверяем совпадающие точки, почти антиподы, полярные области, взаимные преобразования LLA↔ECEF, ENU, DMS↔DD, площади.


Производительность и точность

Производительность. Реализация без зависимостей быстра для большинства задач; для предельной точности внедряйте Карни.


Расширения и дорожная карта

Расширения. UTM/Гаусс–Крюгер, эллипсоидные площади, датумы и 7-параметрические преобразования, GeoJSON/GPX, батч-режим.


FAQ

FAQ. Почему не сходится Винценти? — антиподы; у нас есть fallback. Какова точность сферической площади? — зависит от размера контура. Почему ENU «крутятся»? — это локальная касательная плоскость.


Выводы

Итог. У нас готов рабочий геодезический калькулятор на чистом Python, пригодный для практики и расширений.


Дополнительные заметки

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

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

 

В калькулятор добавлено:

  • UTM (WGS84) прямое/обратное преобразование
  • Гаусса–Крюгера (3° или 6° зоны; классический «немецкий» режим с префиксом зоны в восточном смещении)
  • Пакетные преобразования CSV
  • Трансформации GeoJSON (Point/LineString/Polygon/Multi*)
  • Импорт/экспорт GPX (вейпойнты)

 

Как работать со скриптом (кликнуть)


Размещено: 28.10.2025

geodesic_calculator3.7z (6.96 Kb), ishodny_cod.txt (27.35 Kb)


Оценка: 0, Голосов: 0  

Голосование
Добавить ли гостевую книгу?


 
Календарь
<< Ноябрь 2025 >>
П В С Ч П С В
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
 
Интересно знать

Психология мотивации: почему ученики теряют интерес к учебе и как его вернуть

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

Как ИИ меняет образование: плюсы, риски и будущее учителей в цифровой эпохе

Аннотация: Статья анализирует влияние технологий искусственного интеллекта (ИИ) на современную систему образования. Особое внимание уделено возможностям адаптивного обучения, автоматизации педагогических процессов, рискам, связанным с приватностью данных, и трансформации роли преподавателя. Рассматриваются перспективы интеграции ИИ в...

Геодезический калькулятор, пишем на Python

Введение и цели Коротко: в этой статье мы шаг за шагом создадим полноценный геодезический калькулятор на Python без внешних библиотек. Он умеет считать расстояния и азимуты по эллипсоиду WGS84 (алгоритм Винценти), строить прямую геодезическую задачу, конвертировать координаты между широтой/долготой/высотой (LLA) и правой прямоугольной системой...

Ложные координаты: как работает GPS-спуфинг и чем он опасен городам

Аннотация. В статье в популярно‑академическом формате рассматриваются угрозы, связанные с преднамеренным и непреднамеренным искажением сигналов глобальных навигационных спутниковых систем (GNSS), известным как «спуфинг» и «джамминг». Поясняется, как приёмники определяют координаты, какие уязвимости заложены в открытых...

Геодезия в смартфоне: правда ли приложения заменяют тахеометр? Большой разбор

Аннотация. Статья критически рассматривает возможности и ограничения смартфонов и планшетов в задачах, традиционно решаемых геодезическими приборами — тахеометрами и GNSS‑приёмниками. Обсуждаются датчики (GNSS, IMU, камерные системы, потребительский LiDAR/ToF), программные стек‑технологии (ARKit/ARCore, визуально‑инерциальная одометрия,...

 
Посещение сайта