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

mapGeoToPlane и обратно

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

Использую прямой и обратный перевод с помощью функций MAPAPI.H:
Код
_MAPIMP long int _MAPAPI mapPlaneToGeo(HMAP hmap, double *Bx, double *Ly);
_MAPIMP long int _MAPAPI mapGeoToPlane(HMAP hmap, double *Bx, double *Ly);
Когда я беру долготу равную 60, то результат прямого и обратного перевода хороший.
Код
latitude = 55 * M_PI / 180;
longitude = 60 * M_PI / 180;
//latitude = "0.959931089", longitude = "1.047197551" 
mapGeoToPlane(hMap, &latitude, &longitude);
mapPlaneToGeo(hMap &latitude, &longitude);
//latitude = "0.959931657", longitude = "1.047198523" 
Но если взять долготу к примеру 95, тогда получается ошибка.
Код
latitude = 55 * M_PI / 180;
longitude = 95 * M_PI / 180;
//latitude = "0.959931089", longitude = "1.658062789" 
mapGeoToPlane(hMap, &latitude, &longitude);
mapPlaneToGeo(hMap &latitude, &longitude);
//latitude = "1.074225290", longitude = "2.910563074" 
В чем причина такого огромного расхождения?
 
Скорее всего у вас карта с проекцией Transverse Mercator (СК42, СК95, СК63, отечественная МСК, UTM)  с осевым меридианом зоны в районе 60 градусов. В этом случае пересчет имеет смысл в пределах зоны.
Изменено: Борзов Андрей - 28.03.2017 10:51:44
 
Да, другой причины расхождения не вижу. Полагаю, для того чтобы получить корректный перевод в одну сторону, нужно после mapGeoToPlane использовать mapPlaneToPlaneByZone (или mapPlaneUTMToPlaneUTMByZone). Какая функция может вернуть осевой меридиан центрального листа по hmap? Нашел mapGetAxisMeridianFromNomenclatur, но она в качестве параметра требует номенклатуру листа - тоже не знаю где взять.
Изменено: earth_planet - 28.03.2017 12:17:32
 
1. Прямоугольные координаты (X, Y) в зональных системах координат имеют смысл только в пределах зоны (+- ползоны влево, вправо). Дальше искажения становятся очень большим.
2. mapPlaneToPlaneByZone предназначена для пересчета в соседнюю зону (для вашего случая получатся такие же гигантские ошибки)
3. Запросить систему координат карты можно функцией mapGetMapInfoEx. Она заполняет MAPREGISTEREX, в которой есть поле AxisMeridian - это и есть осевой меридиан зоны. Там же посмотрите проекцию в MaterialProjection.
 
Плоская прямоугольная система координат СК-42 (СК-95, ГСК-2011, UTM) - это 60 разных систем координат, действующих в пределах 6-градусных зон (есть и 3-градусные зоны).
Нельзя определить координаты точки на долготе 95 градусов для системы координат, построенной в районе 60 градусов по долготе.
Нужно использовать другие системы координат, чтобы работать в единой системе. Например, геодезические координаты.
Для ГИС в принципе не нужны прямоугольные координаты. Вся работа может вестись в геодезических координатах.
Только при отображении картинки задается проекция (плоская прямоугольная система) в текущий момент времени для текущей территории.
Страницы: 1
Читают тему (гостей: 1)



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

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