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

Пересчёт координат объектов из разных зон

Поиск  Пользователи  Правила  Войти
Форум » Общие вопросы » Системы координат
Страницы: 1
RSS
Пересчёт координат объектов из разных зон
 

Здравствуйте. Используя mapapi из sdk ,формирую пользовательскую карту в формате SIT с объектовым составом из SHP файлов (рамки ЦКМ), (Тип карты: Топогр унив местная, Проекция : Transverse Mercator, Эллипсоид Кларка, Осевой меридиан «-3» (зона UTM 30)).

Какой нужно воспользоваться функцией для корректного пересчета координат объектов из смежных зон, например, зона 31?

 
Цитата
Сергей Алексеев написал:
Используя mapapi из sdk ,формирую пользовательскую карту в формате SIT с объектовым составом из SHP файлов (рамки ЦКМ), (Тип карты: Топогр унив местная, Проекция : Transverse Mercator, Эллипсоид Кларка, Осевой меридиан «-3» (зона UTM 30)). Какой нужно воспользоваться функцией для корректного пересчета координат объектов из смежных зон, например, зона 31?
Есть документ ГЕОИНФОРМАЦИОННАЯ СИСТЕМА ГИС ПАНОРАМА. Руководство программиста.
Раздел 4.2.5 Управление системой координат карты. Предлагаем ознакомиться.
http://gistoolkit.ru/download/doc/mapapi.pdf
Изменено: Елена Кузнецова - 17.11.2017 11:36:09
 
Возник следующий вопрос:
Имею 2 рамки SHP. Одна из них в 30-й зоне, вторая в 31-й. Формирую единый Sit с рамками из разных зон. Создаваемая пользовательская карта записывает параметры MAPREGISTEREX и DATUMPARAM полученные путём передачи функции mapGetParametersForEPSG кода EPSG от рамки SHP из 30-й зоны. При попытки пересчёта координат SHP рамки из 31-й зоны в 30-ю получаю не верные значения.

НАПРИМЕР:

double x = 3959421,350;
double y = 251329,557;
mapPlaneUTMToPlaneUTMByZone(31,30, &x,&y);

получаю:

x = -9997958,28958189
y = 29999936,2007324

Полученные значения явно не верны.
Подскажите пожалуйста как правильно действовать в данной ситуации?
 
В функции  mapPlaneUTMToPlaneUTMByZone есть ошибка. В новой версии она исправлена. Спасибо за сообщение!

Есть общий алгоритм для пересчета любых координат. Для его работы в папке с приложением должны быть файлы epsg.csg, epsg.csp, epsg.csu.

Стандартный алгоритм имеет следующий вид для данной задачи:
Код
 // Подготовить систему координат для применения
 HANDLE hsrc = mapCreateUserSystemParametersByEpsg(32600 + 31);       // UTM zone 31
 HANDLE htarget = mapCreateUserSystemParametersByEpsg(32600 + 30);    // UTM zone 30

 // Выполняем пересчет
 double x = 3959421.35;
 double y = 251329.557;

 // От UTM зона 31 к WGS84
 mapUserPlaneToGeoWGS84(hsrc, &x, &y);

 // От WGS84 к UTM зона 30
 mapGeoWGS84ToUserPlane(htarget, &x, &y);

 sprintf(message, "X = %.5lf Y = %.5lf", x, y);
 ::MessageBox(0, message, "User CRS",  MB_OK | MB_TASKMODAL | MB_ICONINFORMATION);

 // Освобождаем ресурсы 
 mapDeleteUserSystemParameters(hsrc);
 mapDeleteUserSystemParameters(htarget);
Если нужно работать с системой координат, для которой нет стандартного  кода EPSG, то можно задать параметры через структуры MAPREGISTEREX,  ELLIPSOIDPARAM, DATUMPARAM.
Можно ввести пользовательский код EPSG через файл crslist.xml, который должен быть в папке с приложением.
Добавить новую систему в файл crslist.xml можно через диалог Паспорт карты или в текстовом редакторе.


 Старый алгоритм (он построен на том же принципе - переход к WGS84 и от нее к новой системе) :
Код
 // Старая функция возвращает точно такой же результат (после исправления)
 x = 3959421.35;
 y = 251329.557;

 mapPlaneUTMToPlaneUTMByZone(31, 30, &x, &y);

 char message[200];
 sprintf(message, "X = %.5lf Y = %.5lf", x, y);
 ::MessageBox(0, message, "UTM to UTM",  MB_OK | MB_TASKMODAL | MB_ICONINFORMATION);
Страницы: 1
Читают тему (гостей: 1)



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

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