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

Зарамочное оформление карты через gisapi

Поиск  Пользователи  Правила  Войти
Форум » Linux » ГИС Панорама для Linux
Страницы: 1 2 След.
RSS
Зарамочное оформление карты через gisapi
 
Здравствуйте!

Подскажите, пожалуйста, как с помощью gisapi  создать зарамочное оформление карты соответствующее формируемому с  помощью ГИС Оператора (out-of-bounds_operator.png).

Использование функции comMarginalRepresentationCreateSite из http://gisweb.ru/forum/messages/forum2/topic770/message3245/770#message3245 удовлетворительного результата не дает (out-of-bounds_my.png). Вот мой код ее вызова:    
Код
TASKPARM taskparm;
taskparm.Language = 2;

FRAMEPRINTPARAM frameparam;
frameparam.PlaneFrame.X1 = 6155000;
frameparam.PlaneFrame.Y1 = 7407000;
frameparam.PlaneFrame.X2 = 6167000;
frameparam.PlaneFrame.Y2 = 7423000;

MARGREPRESFILE margrepres;
margrepres.SitName = "/home/user/tmp/sitname.sit";
margrepres.RscName = "/usr/Operator11/frm100000.rsc";
margrepres.FrmName = "/usr/Operator11/100000.frm";

HSITE site = comMarginalRepresentationCreateSite(map()->handle(), &taskparm, &frameparam, &margrepres);

 
Здравствуйте!

Для создания объектов зарамочного оформления используются функции из библиотеки frmapi.
Обсуждение данной темы можно посмотреть в этой ветке форума:
http://gisweb.ru/forum/messages/forum2/topic9264/message69521/9264-funktsii-sozdaniya-zaramochnogo-oformleniya#message69521
 
Где бы взять заголовочные файлы для libfrmapi.so и исходники окна  "Формирование зарамочного оформления" для AstraLinux?
 
Здравствуйте!

Обновили SDK для ГИС Оператор SE - в новой версии в состав входит заголовочный файл frmapi.h.
Новая версия доступна для скачивания на нашем сайте: https://gisinfo.ru/download/download_linux.htm#13
 
Здравствуйте!

Написал пример для вызова функции frmCreateBorder по аналогии с примером из sdk12 для Windows. При вызове frmCreateBorder выводит в лог ошибку "Обшибка регистрации объекта с кодом 0 !" 12 раз. При этом рамка рисуется не полностью.
libfrmapi.so была взята из ГИС Оператор 11.13.11. ID=39724.



Код
void BuildFrameDlg::execute()
{
    int sheetNum = 1;
    double angle = 0.0;

    HSITE rsit   = 0;
    HSITE frmsit = 0;

    DATUMPARAM   datum;
    ELLIPSOIDPARAM ellipsoid;
    memset(&datum, 0, sizeof(datum));
    memset(&ellipsoid, 0, sizeof(ellipsoid));
    mapGetSiteDatum(Hmap, Hmap, &datum);
    mapGetSiteEllipsoidParameters(Hmap, Hmap, &ellipsoid);


    MAPREGISTEREX   mapregex;
    LISTREGISTER    listreg;
    SHEETNAMES   sheet;
    memset(&mapregex,0,sizeof(mapregex));
    memset(&listreg,0,sizeof(listreg));
    memset(&sheet, 0, sizeof(sheet));


    assert(mapGetMapInfoEx(Hmap, sheetNum, &mapregex, &listreg) != 0);

    UnicodeToString(RotateSit, listreg.FileName, sizeof(listreg.FileName));
    StrCopy(listreg.Nomenclature, "Sheet1", 200);
    StrCopy(listreg.ListName, listreg.Nomenclature, sizeof(listreg.ListName));

    WcsCopy(sheet.Nomenclature, L"Sheet1", 200);
    WcsCopy(sheet.ListName, L"Sheet1", 200);
    WcsCopy(sheet.FileName, RotateSit, sizeof(sheet.FileName));

    QString rscFileName("/usr/Operator11/frm200000.rsc");
    assert(ExistTheFile(rscFileName.toLocal8Bit()));

    //=======================================
    // Создать повёрнутый лист
    // Вид карты: -1 - SIT c рамкой
    mapregex.FlagRealPlace = -1;

    qWarning((QString("RotateSit: ") + QString::fromUtf16(RotateSit)).toLocal8Bit());
    HMAP fmap = mapCreateMapPro(RotateSit, rscFileName.utf16(), &mapregex, &listreg,
                                &sheet, ru("ПОВЕРНУТЫЙ ЛИСТ").utf16(), 0, 0);
    assert(fmap);
    if (fmap != 0)
    {
        // Установить параметры DATUM и Ellipsoid
        mapSetSiteDatum(fmap, fmap, &datum);
        mapSetSiteEllipsoidParameters(fmap, fmap, &ellipsoid);

        mapSaveSite(fmap, fmap, 1);
        mapCloseData(fmap);

        // Создать пользовательскую карту по открытой карте
        rsit = mapOpenSiteForMapPro(Hmap, RotateSit, 0, 0, 0, 0);
        assert(rsit);
    }


    qWarning((QString("FrameSit: ") + QString::fromUtf16(FrameSit)).toLocal8Bit());
    fmap = mapCreateMapPro(FrameSit, rscFileName.utf16(), &mapregex, &listreg,
                                &sheet, ru("ОФОРМЛЕНИЕ").utf16(), 0, 0);
    assert(fmap);
    if (fmap != 0)
    {
        // Установить параметры DATUM и Ellipsoid
        mapSetSiteDatum(fmap, fmap, &datum);
        mapSetSiteEllipsoidParameters(fmap, fmap, &ellipsoid);

        mapSaveSite(fmap, fmap, 1);
        mapCloseData(fmap);

        // Создать пользовательскую карту по открытой карте
        frmsit = mapOpenSiteForMapPro(Hmap, FrameSit, 0, 0, 0, 0);
        assert(frmsit);
    }

    assert(frmCreateBorderPro(Hmap, sheetNum, rsit, frmsit, QString("/usr/Operator11/200000.frm").utf16(),
                              angle, QString("/usr/Operator11/Data/Noginsk/frame/frame.log").utf16(), 0));
    mapCloseSiteForMap(Hmap, rsit);
    mapCloseSiteForMap(Hmap, frmsit);
}
Изменено: Андрей Сычев - 06.12.2019 16:46:39
 
Здравствуйте!

Попробуйте в скрипт запуска ГИС Оператор (/usr/Operator11/startgis.bat) добавить строку с содержимым:
Код
export LC_NUMERIC="C"
Пример части итогового скрипта запуска:
Код
PANPATH=/usr/Operator11
export LD_LIBRARY_PATH=$PANPATH:$LD_LIBRARY_PATH
export LC_NUMERIC="C"

cd $PANPATH
/usr/Operator11/operator.exe
 
Спасибо. Помогло. Рамка рисуется такая же как и через Operator11.

Еще вопросы:1. Нет ли у вас шаблона  для 500 000 карты? В поставке Оператора для Астры он отсутствует.
2. В коде диалога формирования рамки есть флажок формирования рамки для региона (из нескольких листов). Но в Operator11 для Астры я так и не смог добиться чтобы он показывался. Это вообще возможно?
3. Можно ли с помощью frmCreateBorderPro создать рамку на район работ содержащий листы нескольких 6-и градусных зон? Если для региона Воронеж, состоящего из 4 листов из одной 6-и градусной зоны у меня получилось создать  рамку на весь район работ, то для района работ с листами из 3-х 6-и градусных зон не создалось ничего.
 
Здравствуйте!

Цитата
Андрей Сычев написал:
1. Нет ли у вас шаблона  для 500 000 карты? В поставке Оператора для Астры он отсутствует.
На данный момент шаблон для карт масштаба 1 : 500 000 отсутствует в составе инсталляции ГИС Оператор SE для Astra Linux - мы дополним его в следующей версии.
Поскольку форматы файлов frm и rsc кроссплатформенны, то при возможности Вы можете использовать их из состава ГИС Оператор для Windows.
Если такой возможности нет, то мы можем скопировать Вам их в рабочем порядке.

Цитата
Андрей Сычев написал:
2. В коде диалога формирования рамки есть флажок формирования рамки для региона (из нескольких листов). Но в Operator11 для Астры я так и не смог добиться чтобы он показывался. Это вообще возможно?
Для этого необходимо создать многолистовую карту формата map - например, с помощью импорта набора файлов sxf.
 
Цитата
Андрей Сычев написал:
3. Можно ли с помощью frmCreateBorderPro создать рамку на район работ содержащий листы нескольких 6-и градусных зон? Если для региона Воронеж, состоящего из 4 листов из одной 6-и градусной зоны у меня получилось создать  рамку на весь район работ, то для района работ с листами из 3-х 6-и градусных зон не создалось ничего.
Здравствуйте.

На текущий момент создание рамки на район работ возможно только в пределах одной 6-и градусной зоны.
С уважением, Демиденко Р.А.
 
Здравствуйте.
Вышлите, пожалуйста, шаблоны для карт масштаба 1 : 500 000, 1 : 1 000 000, 1 : 2 000 000, 1 : 5 000 000.
Страницы: 1 2 След.
Читают тему (гостей: 3)



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

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