На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

Конвертация в ПЗ-90.11

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1
RSS
Конвертация в ПЗ-90.11
 
Поддерживается ли Конструктором система координат ПЗ-90.11 и, если да, каким образом пересчитывать координаты в ней?
 
Здравствуйте!

ГИС Конструктор поддерживает пересчет координат в систему ПЗ-90.11.
Пример реализации пересчета можно посмотреть в разделе 3.6.5 "Управление системой координат карты" Руководства программиста (http://gistoolkit.ru/download/doc/gisdesigner_prog.pdf).

Для пересчета необходимо использовать вид эллипсоида SGS_85_2011, описанный в заголовочном файле mapcreat.h.
 
Александр Савелов,спасибо. Странно в нашем руководстве программиста, которое шло в комплекте с дисками, ни слова об этом нет, хотя тоже стоит 2014 год.
 
Цитата
Александр Савелов написал:
Для пересчета необходимо использовать вид эллипсоида SGS_85_2011
Взяли пример из документации, добавили эллипсоид:

Код
d_x = degToRad(71.1105555555555);  //WGS x: 76 06 38
d_y = degToRad(27.7322222222222);  //WGS y: 27 43 56
d_alt = 18.0;

MAPREGISTEREX mapreg;
memset((void*)&mapreg, 0, sizeof(mapreg));
mapreg.Length = sizeof(mapreg);
mapRegisterFromMapType(MERCATOR, &mapreg);
mapreg.EllipsoideKind = SGS_85_2011;
HANDLE husersys = mapCreateUserSystemParameters(&mapreg, 0, 0);

int ret = mapGeoWGS84ToUserGeo3D(husersys, &d_x, &d_y, &d_alt);
mapDeleteUserSystemParameters(husersys);
По задумке, в этом примере WGS84 градусы пересчитываются в градусы ПЗ-90.11. На практике, содержимое переменных d_x, d_y и d_alt никак не изменяется после выполнения mapGeoWGS84ToUserGeo3D(), при этом функция возвращает код 1, что, согласно документации, означает успешное выполнение функции.

ГИС Конструктор 13.0.0.5, OS AstraLinux 1.6
 
В приведенном примере не хватает параметров пересчета (датума).
Можно заполнить параметры структуры DATUMPARAM:
Код
// ПЗ-90.11  ->  WGS-84
DATUMPARAM datum;
datum.DX = DX_SGS85_11_WGS84; //    0.013
datum.DY = DY_SGS85_11_WGS84; //   (-0.106)
datum.DZ = DZ_SGS85_11_WGS84; //   (-0.022)
datum.RX = RX_SGS85_11_WGS84; //    0.0023
datum.RY = RY_SGS85_11_WGS84; //   (-0.00354)
datum.RZ = RZ_SGS85_11_WGS84; //    0.00421
datum.M   = M_SGS85_11_WGS84; //    0.000000008

ELLIPSOIDPARAM ellipsoid;
mapGetEllipsoidParameters(SGS_85_2011, &ellipsoid);
указать адрес этой структуры в функции mapCreateUserSystemParameters.

Код
HANDLE husersys = mapCreateUserSystemParametersPro(&parm, &datum, &ellipsoid);
Код
 // Установить текущие параметры пользовательской системы координат
 // parm      - параметры рабочей системы координат (см. MAPCREAT.H)
 // datum     - параметры пересчета с эллипсоида рабочей системы координат
 //             к WGS84 (datum может быть 0)
 // ellipsoid - параметры пользовательского эллипсоида для рабочей
 //             системы координат, только когда поле EllipsoideKind в
 //             MAPREGISTEREX равно USERELLIPSOID (ellipsoid может быть 0)
 // ttype     - тип локального преобразования координат (см. TRANSFORMTYPE в mapcreat.h) или 0
 // tparm     - параметры локального преобразования координат (см. mapcreat.h)
 // code      - код EPSG (для Широта\Долгота на WGS84: 4326),
 //             для СК-42 зоны 1-60: 28401-28460, для СК-95 зоны 1-60: 20001-20060
 //             для UTM на WGS84 зоны 1-60: 32601-32660
 //             для Гаусса-Крюгера на ПЗ-90.11 зоны 1-60: 80011001-80011060
 // Возвращает идентификатор пользовательской системы координат
 // По завершении использования необходимо вызвать mapDeleteUserSystemParameters
 // При ошибке возвращает ноль

_MAPIMP HANDLE _MAPAPI mapCreateUserSystemParametersPro(MAPREGISTEREX * parm, DATUMPARAM * datum, ELLIPSOIDPARAM * ellipsoid,
                                                        long int ttype,LOCALTRANSFORM * tparm);
_MAPIMP HANDLE _MAPAPI mapCreateUserSystemParameters(MAPREGISTEREX *parm,DATUMPARAM *datum, ELLIPSOIDPARAM *ellipsoid);
_MAPIMP HANDLE _MAPAPI mapCreateUserSystemParametersByEpsg(long int code);

Или можно заполнить параметры по коду системы ПЗ-90.11 (не путать с топокартами на эллипсоиде ПЗ-90.11):
Код
HANDLE husersys = mapCreateUserSystemParametersByEpsg(7680);
 
Вопрос снят, использовал функции пересчета

Код
_MAPIMP void _MAPAPI mapGeoEP9011ToGeoWGS843D(double *Bx, double *Ly, double *H);
_MAPIMP void _MAPAPI mapGeoWGS84ToGeoEP90113D(double *B, double *L, double *H);
Страницы: 1
Читают тему (гостей: 1)



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности