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

Конвертирование SXF в SITX

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1
RSS
Конвертирование SXF в SITX, Странное поведение функции ImportFromAnySxfPro
 
Версия ГИС Конструктор 14.0.1.21 Free (AstraLinux SE).
Пытаюсь выполнить конвертирование большого числа файлов SXF в формат SITX, для дальнейшего использования.
Примерный код:
Код
    QFileInfoList fileList = QFileInfoList();
    QDir curDir = QDir(ui->le_InputDir->text());
    searchForEXT("sxf", curDir, fileList);       // Получаем список путей к SXF в директории


    const WCHAR * rscname;                       
    rscname = ui->le_InputRSC->text().utf16();


    for (int i = 0; i < fileList.count(); i++)
    {
        const WCHAR * sxfname;
        sxfname = fileList.at(i).utf16();


        QString sNewSITX = ui->le_OutputDir->text() + "/" +     
                fileList.at(i).fileName();
        sNewSITX.resize(sNewSITX.length() - 4);
        sNewSITX += ".sitx";


        //Конвертируем QString в WCHAR--------------------------------
        WCHAR mapname[MAX_PATH_LONG]; mapname[0] = 0;          
        const char * newsitx;
        newsitx = sNewSITX.toLocal8Bit();
        StringToUnicode(newsitx,mapname,sizeof(mapname));
        //-----------------------------------------------------------


        MAPREGISTEREX mapreg;
        LISTREGISTER listreg;


        mapreg.Length = sizeof(MAPREGISTEREX);
        listreg.Length = sizeof(LISTREGISTER);


        memset((void *)&mapreg, 0, sizeof(mapreg));
        memset((void *)&listreg, 0, sizeof(listreg));


        int iconv = mapGetAnySxfInfoByNameUn(sxfname, &mapreg, &listreg); // Информация, необходимая в дальнейшем


        //=================================================================================
        // Запуск процесса конвертации
        //=================================================================================
        if (ImportFromAnySxfPro(0,sxfname,rscname,mapname,MAX_PATH_LONG,0,0,0,-1,0,0) != 0)
        {
            if(!QFile(sNewSITX).exists())
                qDebug() << "ImportFromAnySxfPro(..)!=0, but" << sNewSITX << "not created!!!";
        }
        else
            qDebug() << sNewSITX << "ERROR";
    }
  }

Столкнулся с тем, что функция "ImportFromAnySxfPro(...)" не всегда корректно отрабатывает. Причем, бывает что на одних и тех же данных процесс полностью проходит нормально, а бывает одно "несрабатывание" или несколько. При этом, иногда получаю сообщения, как на скриншотах. Те файлы, которые оказались не обработаны остаются "мусором" рядом с бинарником (скриншоты).
Для того, чтобы "эффект" проявился, необходимо, чтобы SXF представляли собой топографические карты масштаба 1:100 000 (как минимум) и их было во входной директории хотя бы семь.
Если необходимо, укажите, на какую почту я могу прислать свой набор.
Пример проекта прилагаю.
Скриншот 1
Скриншот 2
Скриншот 3
Скриншот 4
Тестовый проект
 
Добрый день!

Проблема может быть вызвана некорректной перекодировкой в WCHAR:
Цитата
       //Конвертируем QString в WCHAR--------------------------------
       WCHAR mapname[MAX_PATH_LONG]; mapname[0] = 0;          
       const char * newsitx;
       newsitx = sNewSITX.toLocal8Bit();
       StringToUnicode(newsitx,mapname,sizeof(mapname));
       //-----------------------------------------------------------
Для исключения возможных ошибок, связанных с перекодировкой, можно использовать функцию WcsCopy() (mapsyst.h):
Код
// Копирует UNICODE строку в UNICODE строку
// Если буфер меньше строки, то строка обрезается
// src      - адрес входной строки UTF-16
// dest     - адрес буфера для размещения выходной строки UTF-16
// destsize - размер выходной строки в БАЙТАХ
INLINEFUNC WCHAR* WcsCopy(WCHAR *dest, const WCHAR *src, int destsize)
В данном случае код будет выглядеть следующим образом:
Код
WCHAR mapname[MAX_PATH_LONG]; mapname[0] = 0;
WcsCopy(mapname, sNewSITX.utf16(), sizeof(mapname));
 
Александр Савелов, спасибо! Вроде, помогло.
Страницы: 1
Читают тему (гостей: 1)



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

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