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

Проблема с сохранением объекта карты после вставки точки метрики

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1
RSS
Проблема с сохранением объекта карты после вставки точки метрики
 
Приветствую!

ГИС Конструктор для Qt Designer x64 (версия 12.3.0), ОС Astra Linux

Столкнулся с проблемой: сохранение объектов после вставки точки метрики работает через раз.
Тест:
Код
#include <QString>
#include <QDebug>
#include "mapapi.h"
#include "sitapi.h"
#include "rscapi.h"
#include "mapcreat.h"
#include "maptype.h"

void appentPointPicture(HMAP hmap, HOBJ hobj, int x, int y) {
   double xp = x;
   double yp = y;
   mapPictureToPlane(hmap, &xp, &yp);
   mapAppendPointPlane(hobj, xp, xp, 0);
}

void insertPointPicture(HMAP hmap, HOBJ hobj, int x, int y, int index) {
   double xp = x;
   double yp = y;
   mapPictureToPlane(hmap, &xp, &yp);
   mapInsertPointPlane(hobj, xp, xp, index, 0);
}

void checkPointCount(HMAP hmap, HSITE hsite, long int number) {
   HOBJ hobj = mapCreateSiteObject(hmap,hsite);
   mapReadObjectByNumber(hmap,hsite,hobj,1,number);
   qDebug() << "points count: " << mapPointCount(hobj, 0);
   mapFreeObject(hobj);
}

// тест изменения метрики
int main(int argc, char ** argv) {
   QString* siteName = new QString("/home/user/temp/testMetrics.sitx");
   QString* rscName = new QString("/home/user/temp/operator.rsc");
   CREATESITEUN cs;
   memset((void*) &cs, 0, sizeof(cs));
   cs.Length = sizeof(CREATESITEUN);
   cs.EllipsoideKind = 9;
   cs.MapType = 16;

   HMAP hmap = mapCreateSiteUn((const WCHAR*) siteName->constData(),
         (const WCHAR*) rscName->constData(), &cs);
   if (hmap != 0) {
      HSITE hsite = hmap;
      HOBJ hobj = mapCreateSiteObject(hmap, hsite);
      if (hobj != 0) {
         mapSetRealShowScale(hmap, 10000.);
         //создадим объект
         if (mapRegisterObjectByKey(hobj, "11102500032503") != 0) {
            appentPointPicture(hmap, hobj, 10, 10);
            appentPointPicture(hmap, hobj, 100, 100);
            mapCommitObject(hobj);
            qDebug() << "points count after create: " << mapPointCount(hobj, 0);
            long int objNumber = mapObjectNumber(hobj);
            qDebug() << "real:";
            checkPointCount(hmap,hsite,objNumber);

            //вставим точку после первой
            insertPointPicture(hmap, hobj, 20, 50, 1);
            mapCommitObject(hobj);
            qDebug() << "points count after first insert: " << mapPointCount(hobj, 0);
            qDebug() << "real:";
            checkPointCount(hmap,hsite,objNumber);

            insertPointPicture(hmap, hobj, 20, 50, 1);
            mapCommitObject(hobj);
            qDebug() << "points count after second insert: " << mapPointCount(hobj, 0);
            qDebug() << "real:";
            checkPointCount(hmap,hsite,objNumber);
         } else {
            qDebug() << "mapRegisterObjectByKey error";
         }
         //освобождаем объект
         mapFreeObject(hobj);
      } else {
         qDebug() << "mapCreateObject error";
      }
      mapCloseMap(hmap);
   }

}

Результат:
Код
points count after create:  2
real:
points count:  2
points count after first insert:  3
real:
points count:  2
points count after second insert:  4
real:
points count:  4
С уважением,
Матвеев П.В.
 
Приветствую!

Пока в качестве временного решения использую вот такое сохранение объектов:
Код
void bugfixCommit(HOBJ hobj) {
   mapCommitObject(hobj);
   double x = mapXPlane(hobj,1,0);
   double y = mapYPlane(hobj,1,0);
   mapUpdatePointPlane(hobj,x,y,1,0);
   mapCommitObject(hobj);
}


С уважением,
Матвеев П.В.
 
Цитата
Пока в качестве временного решения использую вот такое сохранение объектов:[TABLE][TR][TH]Код[/TH][/TR][TR][TD]void bugfixCommit(HOBJ hobj) { mapCommitObject(hobj); double x = mapXPlane(hobj,1,0); double y = mapYPlane(hobj,1,0); mapUpdatePointPlane(hobj,x,y,1,0); mapCommitObject(hobj); } [/TD][/TR][/TABLE]
А помогает два mapCommitObject или вызов mapUpdatePointPlane ?

Я щас как раз начал добавлять классы для работы с объектами в пользовательских слоях, и такие приколы с метрикой не радуют.
 
Приветствую!

Два commit у меня не привели к результату, update без предварительного commit тоже не помог. Требуется после commit изменить какую-нибудь точку после insert и потом повтоный commit. По факту, точке устанавливается то же значение что и было раньше.
Я думаю, разработчики ГИС Конструктор легко справятся с этой проблемой,  я добавил воркэраунд временно). У меня это решило проблему с вставкой точек и объединением объектов.

С уважением,
Матвеев П.В.
 
Цитата
Приветствую!

Два commit у меня не привели к результату, update без предварительного commit тоже не помог. Требуется после commit изменить какую-нибудь точку после insert и потом повтоный commit.
Спасибо.
 
Проблема исправлена в обновленной версии 12.3.1
Страницы: 1
Читают тему (гостей: 1)



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

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