В контексте использования mapapi. Ситуация: Импортируем набор SXF файлов в MAP формат. Поддерживаем выбор зоны привязки (берётся по зоне первого SXF файла). То есть, допустим, есть набор листов карты, захватывающий 5-ую и 6-ую зону, выбрали первым файлом SXF с 5-ой зоной, получили на выходе MAP карту, привязанную по 5-ой зоне.
Можно ли сконвертировать данную карту в 6-ую зону ? (с использованием mapapi, установить проекцию или как-то ещё?)
У меня пока только вариант сделать обратно экспорт в набор SXF файлов, и снова импорт с указанием другой зоны.
Исходный набор SXF файлов недоступен - карта MAP создана на одной машине, заливается на кучу поставочных устройств уже без исходных SXF.
P.S. Заранее извиняюсь форум не шерстил на эту тему, если где-то уже обсуждалось можно просто ссылкой в меня кинуть. P.P.S. ГИС Конструктор Free для Qt Designer (версия 11, x32 среда выполнения программы: виртуальный образ ОС формата VMWare, созданный на основе инсталляции, полученной от ОАО "Радиоавионика") Плоские прямоугольные координаты СК-42, зоны проекции Гаусса-Крюгера (вроде это так правильно называется, я не геодезист).
Если нужно преобразовать карту из одной системы координат в другую программно, то алгоритм такой:
1. Создать в другой папке пустую карту с теми же параметрами, что и исходная карта, но с другой системой координат - mapGetMapInfoPro, mapCreateMapPro Параметры системы координат можно заполнить по коду EPSG, например:
Код
// Запросить параметры проекции и системы координат по коду EPSG
// Если код EPSG задает геодезическую систему координат,
// то устанавливается проекция Широта\Долгота и соответствующие
// параметры эллипсоида и датум
// Если код EPSG задает плоскую прямоугольную систему координат,
// то все параметры устанавливаются из базы EPSG
// epsgcode - код EPSG, для СК-42 зоны 1-60 : 28401-28460, для СК-95 зоны 1-60: 20001-20060
// mapreg - параметры системы координат и проекции
// datum - параметры пересчета с эллипсоида рабочей системы координат
// к WGS-84
// ellipsoid - параметры пользовательского эллипсоида для рабочей
// системы координат
// Для геодезических систем координат возвращает 2,
// для плоских прямоугольных возвращает 1.
// При ошибке возвращает 0
mapGetParametersForEPSG(long int epsgcode, MAPREGISTEREX *mapreg, DATUMPARAM *datum, ELLIPSOIDPARAM *ellipsoid);
2. Цикл по листам - создать лист в выходной карте (кроме первого листа), запросить число объектов на исходном листе - mapCreateListPro, mapGetObjectCount 3. Цикл по объектам - Чтение объекта по порядковому номеру - mapReadObjectByNumber 4. Смена карты - mapChangeObjectMap 5. Сохранить объект - mapCommitWithPlaceForList 6. Закрыть все mapCloseData
Как-то сложновато получается. Проще видимо эскпорт в набор SXF сделать и обратно заимпортировать уже в другой зоне. Я только ещё не смотрел как экспорт делается. Спасибо.
Создать лист в выходной карте (кроме первого листа) - в смысле первый лист уже будет после создания выходной карты?