Библиотека позволяет осуществить преобразования между
- Геодезическими координатами,
- Геоцентрическими координатами,
- Топоцентрическими координатами,
- Координатами в проекции Гаусса-Крюгера.
Понятия геодезической и геоцентрической систем координат определяются в [1, 2]. Под топоцентрической системой понимается прямоугольная система координат с началом отсчёта в точке на местности [1]. Бибилиотекой используются топоцентрические координаты E, N, U, отложенные по осям с направлением на восток, на север и по нормали к поверхности земного эллипсоида, соответственно [3]. Параметры проекции Гаусса-Крюгера, метод прямого и обратного проектирования точки с геодезическими координатами на эллипсоиде СК-42, а также принятые на территории РФ правила разделения проекции на зоны приводятся в [1-3].
Библиотека включает один транслируемый файл geodesy.c, содержащий функции преобразования координат, и заголовочный файл к нему geodesy.h, написанные в стандарте C99 языка Си.
Файл testbench.c содержит код для проверки точности и производительности реализованных функций преобразования координат и не предназначен для включения в компилируемый проект. Сборка и запуск программы проверки в ОС linux осуществляется скриптом testbench.sh.
Текущая версия библиотеки реализует следующие функции преобразования:
СК1 | СК2 | Имя функции | Пояснение |
---|---|---|---|
Геодезическая | Геоцентрическая | geodetic2ecef | Перевод геодезических коодринат (ШДВ) в геоцентрические (XYZ) |
Геодезическая | Топоцентрическая | geodetic2enu | Перевод геодезических координат (ШДВ) в топоцентрические (ENU) |
Геодезическая | Пр. Гаусса-Крюгера | geodetic2gk | Перевод из геодезической СК в проекцию Гаусса-Крюгера |
Геоцентрическая | Геодезическая | ecef2geodetic | Перевод геоцентрических коодринат (XYZ) в геодезические (ШДВ) |
Геоцентрическая | Геоцентрическая | ecef2ecef | Смена эллипсоида в геоцентрической системе координат |
Геоцентрическая | Топоцентрическая | ecef2enu | Перевод геоцентрических коодринат (XYZ) в топоцентрические (ENU) |
Топоцентрическая | Геоцентрическая | enu2ecef | Перевод топоцентрических координат (ENU) в геоцентрические (XYZ) |
Топоцентрическая | Геодезическая | enu2geodetic | Перевод топоцентрических (ENU) координат в геодезические (ШДВ) |
Пр. Гаусса-Крюгера | Геодезическая | gk2geodetic | Перевод из проекции Гаусса-Крюгера в геодезическую СК |
Функции geodetic2ecef, ecef2geodetic, ecef2enu, enu2ecef, geodetic2enu, enu2geodetic принимают на вход параметры земного эллипсоида. Известные параметры земных эллипсоидов СК-42, WGS-84, ПЗ-90 и ПЗ-90.11 хранят определённые модулем структуры sk42, wgs84, pz90 и pz9011, соответственно.
Функция ecef2ecef реализует преобразование геоцентрических координат между разными эллипсоидами. Она принимает на вход одну из предопределённых структур: wgs84_to_pz9011, pz9011_to_wgs84, pz9011_to_pz90, pz90_to_pz9011, sk42_to_pz9011 и pz9011_to_sk42.
Осуществляется запуском программы, скомпилированной из файла testbench.c. Ниже приводится вывод данной программы, позволяющий определить точность преобразования координат указанными функциями:
Тестируем ecef2geodetic, эллипсоид WGS-84...
Максимальная ошибка Ш: 0.000000000049 градусов [OK]
Максимальная ошибка Д: 0.000000000050 градусов [OK]
Максимальная ошибка В: 0.000000001863 метров [OK]
Тестируем geodetic2ecef, эллипсоид WGS-84...
Максимальная ошибка X: 0.000006800517 метров [OK]
Максимальная ошибка Y: 0.000006216578 метров [OK]
Максимальная ошибка Z: 0.000006238814 метров [OK]
Тестируем ecef2enu, эллипсоид WGS-84...
Максимальная ошибка E: 0.000000000990 метров [OK]
Максимальная ошибка N: 0.000000002794 метров [OK]
Максимальная ошибка U: 0.000000003725 метров [OK]
Тестируем enu2ecef, эллипсоид WGS-84...
Максимальная ошибка X: 0.000000003725 метров [OK]
Максимальная ошибка Y: 0.000000002794 метров [OK]
Максимальная ошибка Z: 0.000000003260 метров [OK]
Тестируем geodetic2enu, эллипсоид WGS-84...
Максимальная ошибка E: 0.000005596317 метров [OK]
Максимальная ошибка N: 0.000008897390 метров [OK]
Максимальная ошибка U: 0.000006267801 метров [OK]
Тестируем enu2geodetic, эллипсоид WGS-84...
Максимальная ошибка Ш: 0.000000000049 градусов [OK]
Максимальная ошибка Д: 0.000000000050 градусов [OK]
Максимальная ошибка В: 0.000000006519 метров [OK]
Тестируем geodetic2gk...
Максимальная ошибка X: 0.000280709006 метров [OK]
Максимальная ошибка Y: 0.000933352858 метров [OK]
Тестируем gk2geodetic...
Максимальная ошибка Ш: 0.000000004100 градусов [OK]
Максимальная ошибка Д: 0.000000009586 градусов [OK]
Тестируем ecef2ecef (точка 1 из 1)...
Ошибка wgs84->pz9011: 0.000504408386 метров [OK]
Ошибка pz9011->wgs84: 0.000504404228 метров [OK]
Ошибка pz9011->pz90: 0.000694675020 метров [OK]
Ошибка pz90->pz9011: 0.000695193184 метров [OK]
Ошибка pz9011->sk42: 0.001096022475 метров [OK]
Ошибка sk42->pz9011: 0.000917185626 метров [OK]
При тестировании используются результаты геодезических вычислений в среде matlab, программе PHOTOMOD GeoCalculator. Более подробная информация о методике тестирования приводится в виде комментариев в файле testbench.c.
Автор не несёт ответственности за негативные последствия вследствие неправильного применения библиотеки или при наличии ошибок в её коде. Доработку библиотеки предлагается проводить с учётом следующих рекомендаций:
- Ограничение кода стандартом языка Си не выше С99.
- Соблюдение принятых программных сокращений (enu, ecef, gk и др.).
- Заместо объявления структурных типов приветствуется передача данных параметрами функций (прочее может вводиться в обёртках).
- Циклы в реализации численных методов должны иметь ограничение на число итераций.
- Точность вычислений по-возможности должна проверяться в testbench.c.
- ГОСТ 22268-76. Геодезия. Термины и определения.
- ГОСТ 32453-2017. Глобальная навигационная спутниковая система. Системы координат.
- Крылов В. И. Координатно-временные преобразования в геодезии: учебное пособие –М.: Изд-во МИИГАиК, 2014. –90 с.