Как работать со скриптом geodesic_calculator.py

Быстрый старт

  1. Скачайте файл: geodesic_calculator.py.
  2. Убедитесь, что установлен Python 3.8+.
  3. Откройте терминал в папке со скриптом и выполните:
    python geodesic_calculator.py --help

Общий синтаксис

python geodesic_calculator.py <подкоманда> [аргументы...]

Геодезические задачи на эллипсоиде (WGS84)

1) Обратная задача: расстояние и азимуты

Длина геодезической линии и начальный/конечный азимут между двумя точками (φ₁,λ₁) и (φ₂,λ₂).

python geodesic_calculator.py distance <lat1> <lon1> <lat2> <lon2>
# пример: Афины → Москва
python geodesic_calculator.py distance 37.9838 23.7275 55.7558 37.6173

2) Прямая задача: точка по расстоянию и азимуту

Из известной точки (φ,λ), азимута и длины дуги получаем конечную точку.

python geodesic_calculator.py direct <lat> <lon> <azimuth_deg> <distance_m>
# пример: от Москвы на азимут 120° на 10 км
python geodesic_calculator.py direct 55.7558 37.6173 120 10000

Форматы координат и преобразования систем

3) DMS ↔ DD (градусы‑минуты‑секунды ↔ десятичные градусы)

DMS → DD

python geodesic_calculator.py dms2dd "55 45 30N" --kind lat
python geodesic_calculator.py dms2dd "37:37:39E" --kind lon

DD → DMS

python geodesic_calculator.py dd2dms 55.758 --kind lat --decimals 2
python geodesic_calculator.py dd2dms 37.6173 --kind lon --decimals 2

4) LLA ↔ ECEF (географические ↔ геоцентрические XYZ)

LLA → ECEF

python geodesic_calculator.py lla2ecef <lat> <lon> <h_m>
python geodesic_calculator.py lla2ecef 37.9838 23.7275 150

ECEF → LLA

python geodesic_calculator.py ecef2lla <X> <Y> <Z>
python geodesic_calculator.py ecef2lla 4510731.1 2000000.0 4000000.0

5) ECEF → ENU (локальная система на точке привязки)

python geodesic_calculator.py enu <X> <Y> <Z> <ref_lat> <ref_lon> <ref_h>
python geodesic_calculator.py enu 4510731 2000000 4000000 37.9838 23.7275 150

Площадь полигона на сфере (приближенно)

6) Площадь на сфере

Аргументы — точки полигона «lat,lon». Для быстрых инженерных оценок (не эллипсоид!).

python geodesic_calculator.py area 55.0,37.0 55.2,37.0 55.2,37.2 55.0,37.2

UTM и Гаусс–Крюгер (поперечная Меркатора)

7) UTM (WGS84)

Вперёд (LLA → UTM)

python geodesic_calculator.py utm fwd <lat> <lon>
python geodesic_calculator.py utm fwd 55.7558 37.6173

Обратно (UTM → LLA)

python geodesic_calculator.py utm inv <zone> <hemi> <easting> <northing>
python geodesic_calculator.py utm inv 37 N 413677 6177830
Примечание: исключения Норвегии/Шпицбергена в UTM не реализованы в этой версии.

8) Гаусс–Крюгер (3° или 6° зоны)

Вперёд (LLA → GK)

python geodesic_calculator.py gk fwd <lat> <lon> [--zone_width 3|6]
python geodesic_calculator.py gk fwd 55.7558 37.6173

Обратно (GK → LLA)

python geodesic_calculator.py gk inv <zone> <easting> <northing> [--zone_width 3|6]
python geodesic_calculator.py gk inv 13 4583450 6177830 --zone_width 3

По умолчанию включён «немецкий» режим: восточное смещение содержит префикс зоны (e = zone×10⁶ + x).


Пакетные преобразования файлов

9) CSV: массовая конвертация

Подкоманда: csv <input_csv> <output_csv> <op> [--zone_width 3|6]

Поддерживаемые op и минимальные колонки входа:

python geodesic_calculator.py csv input.csv output.csv lla2utm
python geodesic_calculator.py csv input.csv output.csv utm2lla
python geodesic_calculator.py csv input.csv output.csv lla2gk --zone_width 3
python geodesic_calculator.py csv input.csv output.csv gk2lla --zone_width 6

Пример input.csv для lla2utm

name,lat,lon
PointA,55.7558,37.6173
PointB,37.9838,23.7275

Результат output.csv

name,lat,lon,utm_zone,utm_hemi,utm_e,utm_n
PointA,55.7558,37.6173,37,N,413677.000,6177830.000
PointB,37.9838,23.7275,34,N,376395.123,4202505.456

10) GeoJSON: трансформация координат

Подкоманда: geojson <input_geojson> <output_geojson> <op> [--zone_width 3|6]

Поддерживаются: Point, MultiPoint, LineString, MultiLineString, Polygon, MultiPolygon.

python geodesic_calculator.py geojson in.geojson out.geojson lla2utm
python geodesic_calculator.py geojson in.geojson out.geojson utm2lla
python geodesic_calculator.py geojson in.geojson out.geojson lla2gk --zone_width 3
python geodesic_calculator.py geojson in.geojson out.geojson gk2lla --zone_width 6
Важно: для обратных операций в координатах должны быть значения зоны/полушария, как их формирует прямой прогон.

11) GPX: импорт/экспорт вейпойнтов

CSV → GPX (колонки lat,lon[,name]):

python geodesic_calculator.py gpx fromcsv points.csv points.gpx --name_field name

GPX → CSV:

python geodesic_calculator.py gpx tocsv points.gpx points.csv

Практические подсказки