создание нового объекта на карте.

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
Firefox
Новоприбывший
Сообщения: 6
Зарегистрирован: 22 мар 2013, 17:29
Репутация: 0

создание нового объекта на карте.

Сообщение Firefox » 22 мар 2013, 17:43

Здравствуйте. Подскажите пожалуйста такое:есть 2 карты одна базовая, вторая пользовательская, в программе которая открывает эти карты пытаюсь написать класс, который после открытия пользовательской карты наносил бы на неё новые объекты, но не получается :( . Вот пример функции addLabel которая написана для добавления объектов._userMap - получаю, когда открываю пользовательскую карту, возвращает не 0.

Код: Выделить всё

bool TraverseTracker::addLabel(QPointF point)   // in meters
{
    if (!_userMap)
    {
        PRINT_DEBUG("No map", 7);
        return false;
    }
    //Add label
    QList<QPointF> points;
    points << point;
    QList<semanticPair> semantic;
    int local = LOCAL_POINT;
    long excode = GLOBAL::labelOperator;

    if (!GisApi::addObject(_userMap, local, excode, points, semantic))
    {
        PRINT_DEBUG("Cant add label",5);
        return false;
    }
    return true;
}
bool GisApi::addObject(HMAP map, long local, long excode, QList<QPointF> points, QList<semanticPair> semantic)
{
    //Check da values
    if (0 == excode)
    {
        PRINT_DEBUG("Wrong object excode", 5);
        return false;
    }
    if ((local < LOCAL_LINE) && (local > LOCAL_MIXED))
    {
        PRINT_DEBUG("Wrong object local", 5);
        return false;
    }
    if (points.count() < 1)
    {
        PRINT_DEBUG("Not enough object metric points count", 5);
        return false;
    }

    //Create empty object on the map
    HOBJ insertObject = mapCreateObject(map);
    if (0 == insertObject)
    {
        PRINT_DEBUG("Cant create object",5);
        return false;
    }

    //Add semantics to insert object
    for (int i = 0; i < semantic.count(); i++)
    {
        long semanticCode = semantic.at(i).first;
        if (0 == semanticCode)
            continue;
//        char *semanticValue = new char[semantic.at(i).second.size()];
//        semanticValue = semantic.at(i).second.toAscii().data();
//        PRINT_DEBUG(QString("Semantic: %1, %2. Str = %3").arg(semanticCode).arg(QString(semanticValue)).arg(semantic.at(i).second), 10);
//        Q_ASSERT(mapAppendSemantic(insertObject, semanticCode, semanticValue, semantic.at(i).second.size()) != 0);
        Q_ASSERT(mapAppendSemantic(insertObject, semanticCode, semantic.at(i).second.toAscii().data(), semantic.at(i).second.size()) != 0);
//        delete []semanticValue;
    }

    //Register object
//    PRINT_DEBUG(QString("Gaf map = %1, insertObject = %2, excode = %3, local = %4, GAf = %5").arg(map).arg(insertObject).arg(excode).arg(local).arg(mapGetMapX2(map)), 10 );



    if (!mapRegisterObject(insertObject, excode, local))
    {
        PRINT_DEBUG("Cant register object",5);
        return false;
    }

    //Add points to the object
    for (int i = 0; i < points.count(); i++)
    {
        if (!mapAppendPointPlane(insertObject, points.at(i).x(), points.at(i).y(), 0))
        {
            PRINT_DEBUG("Cant append metric point to the object",5);
            return false;
        }
    }

    //Commit object to the map file
    if(!mapCommitObjectAsNew(insertObject))  // !!!ПРОБЛЕМА ВОТ В ЭТОМ МЕСТЕ, Ф_ЦИЯ ВОЗВРАЩАЕТ 0
    {
        PRINT_DEBUG("Cant commit object",5);
        return false;
    }

    //Free memory
    mapFreeObject(insertObject);

    return true;
}
void TraverseTracker::setProject(ProjectInfo *pInfo)
{
    _pInfo = pInfo;
    refreshParams();

    //Load user map from whole project.
    QString userMapPath = pInfo->getPath() + GLOBAL::operSitCat + QDir::separator() + pInfo->getUserMapFileName();
    userMapPath = QDir::cleanPath(userMapPath);
    if (_userMap)
        mapCloseData(_userMap);
    _userMap = mapOpenData(userMapPath.toAscii().data());
    if (0 == _userMap)
        PRINT_DEBUG("Cant open userMap :" + userMapPath, 5);
......
}

Подскажите пожалуйста в чем проблема может быть.

Firefox
Новоприбывший
Сообщения: 6
Зарегистрирован: 22 мар 2013, 17:29
Репутация: 0

Re: создание нового объекта на карте.

Сообщение Firefox » 25 мар 2013, 20:05

Прошу прощения проблема скорее всего в правах доступа. файл который пыталась открыть в сетевой папке и права только на чтение стоят. очень не удобно, что открытие карты на запись не выдало ни каких ошибок.

Firefox
Новоприбывший
Сообщения: 6
Зарегистрирован: 22 мар 2013, 17:29
Репутация: 0

Re: создание нового объекта на карте.

Сообщение Firefox » 29 мар 2013, 07:51

Ошибки у меня пропали, все функции работают и не вылетают. но объект не наносится на карту.

Firefox
Новоприбывший
Сообщения: 6
Зарегистрирован: 22 мар 2013, 17:29
Репутация: 0

Re: создание нового объекта на карте.

Сообщение Firefox » 29 мар 2013, 10:32

Подскажите какая правильная последовательность функций должна быть при нанесении объекта на уже существующую карту. И как правильно заполнить параметр семантики. НУ очень надо быстро сделать но ничего не нашла.

Ответить

Вернуться в «QGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость