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

После обновления до Конструктора 13 не рисуются некоторые знаки классификатора

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1
RSS
После обновления до Конструктора 13 не рисуются некоторые знаки классификатора
 
Здравствуйте!
AstraLinux 1.6, Конструктор 12.6.0.190 => 13.0.0.5.
Суть проблемы: после обновления Конструктора до указанной версии перестали правильно отображаться нанесенные знаки классификатора, в частности, точечные и векторные. Выглядит это так - наносим несколько точечных или векторных знаков с разными excode - на карте видим в этих местах несколько одинаковых значков.
Проверял (классификатор самодельный, подвергался редактированию в ГИС Карта 2008 для Windows) на 2-х копиях вирутальной машины, единственное различие - версия Конструктора, в версии 12.6 все рисуется как положено, в 13 - половина знаков дублируется. Картинка по ссылке.
Также проверялся классификатор service.rsc из состава Конструктора 13 в /usr/share/gisdesigner/examples/... , результат неутешительный.
 
Модифицировал для проверки пример из состава Конструктора 13 - mapview.
Общий алгоритм действий такой:
1. Открываю документ map ( функционал mapview )

2. Создаю слой со своим классификатором robot.rsc

Код
void MainWindow::slotCreateSit()
{
    QString fileName = "testing.sit";
    hSite = createSit( fileName, QString("фЕУФПЧЩК УМПК"), MapHandle, "./robot.rsc");

    if( hSite == 0 )   QMessageBox::warning(0, tr("Attention"),tr("Test site map is not created.") );

    qDebug() << "hSite: " << hSite;
}

HSITE createSit(QString fileName,QString sitName,HMAP hm,QString rscName)
{
    char   iniName[256]; memset(iniName,0,256);
    sprintf(iniName,"%sb",mapGetMapIniName(hm));
    mapSetMapIniName(hm,iniName);

    QString nm = QString(iniName);
    QFileInfo fi(nm);
    char        sitname[256]; memset(&sitname,0,256);
    char        rscname[256]; memset(&rscname,0,256);
    MAPREGISTER map; memset(&map,0,sizeof(MAPREGISTER));
    LISTREGISTER sheet; memset(&sheet,0,sizeof(LISTREGISTER));
    CREATESITE  createsite; memset(&createsite,0,sizeof(CREATESITE));
//    sprintf(sitname,"%s/%s",fi.dirPath().toAscii().data(),fileName.toAscii().data());
    sprintf(sitname,"%s/%s",fi.absolutePath().toAscii().data(),fileName.toAscii().data());
    sprintf(rscname,"%s",rscName.toAscii().data());

    HSITE deskPlan(0);
    if(mapGetMapInfo(hm,1,&map,&sheet))
    {
        sprintf(createsite.MapName,"%s",sitName.toAscii().data());
        createsite.Length  = sizeof(CREATESITE);
        createsite.MapType = map.MapType;
        createsite.Scale   = map.Scale;
        createsite.AxisMeridian = map.AxisMeridian;
        createsite.FirstMainParallel = map.FirstMainParallel;
        createsite.MainPointParallel = map.MainPointParallel;
        createsite.MaterialProjection = map.MaterialProjection;
        createsite.SecondMainParallel = map.SecondMainParallel;

        mapCloseSiteForMapByName(hm,sitname);
        if(QFile::exists(rscName)) deskPlan = mapCreateAndAppendSite(hm,sitname,rscname,&createsite);
            else deskPlan = 0;
    }
    if (deskPlan==0) return deskPlan;
//    if(deskPlan<256) deskPlan = mapGetSiteIdent(hm,deskPlan);

    return deskPlan;
}

3) Рисую объекты классификатора

Код
void MainWindow::slotTestPaintObj()
{
    int res = 0;

    res = paintObj( 5564, LOCAL_POINT, 5013249, 5976578 );
    qDebug() << "#1: " << res;

    res = paintObj( 5564, LOCAL_POINT, 5013249, 5980578 );
    qDebug() << "#2: " << res;

    res = paintObj( 5801, LOCAL_POINT, 5013249, 5984578 );
    qDebug() << "#3: " << res;

    res = paintObj( 5803, LOCAL_POINT, 5013249, 5988578 );
    qDebug() << "#4: " << res;

    Map->update();
}

int MainWindow::paintObj(long excode, int local, int x, int y)
{
    HOBJ hObj = mapCreateSiteObject( MapHandle, hSite );
    int res = mapRegisterObject(hObj, excode, local);

    mapAppendPointPlane(hObj,x,y);
    if( local == LOCAL_VECTOR )
        mapAppendPointPlane(hObj,x+10,y+10);

    int success = mapCommit( hObj );
    mapFreeObject( hObj );

    return success;
}

В результате выполнения знаки 5801 и 5803 рисуются какими-то бардовыми точками, что неправильно.
 
Здравствуйте!

В ГИС Конструктор версии 13 для открываемых данных, по умолчанию установлен принтерный вид. Для отображения объектов аналогично ГИС Конструктор версии 12, установите экранный вид отображения после открытия карты. Вид отображения карты устанавливается с помощью функции mapSetViewType(HMAP hmap, long int type), где в качестве параметра type указывается переменная VT_SCREEN (maptype.h).

 
Добавил вызов mapSetViewType() - все описанные проблемы исчезли, спасибо за совет.


Установка вида по-умолчанию - довольно серьезное изменение, не подскажете, где почитать в официальных источниках о подобных изменениях?
 
Добавим сообщение об этом в readme.txt в инсталляционной папке в разделе Что нового.
Страницы: 1
Читают тему (гостей: 1)



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

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