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

Константин Ганюшин (Все сообщения пользователя)

Поиск  Пользователи  Правила  Войти
Форум » Пользователи » Константин Ганюшин
Выбрать дату в календареВыбрать дату в календаре

Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 20 След.
mapPaintMapObjectToDib не рисует в буфер, При отрисовки объекта карты не рисуется в память
 
Пришлите, пожалуйста, полученную карту и файл BMP на почту для проведения диагностики.
realloc(): invalid pointer, Программа неожиданно завершилась. Процесс был завершён принудительно.
 
Здравствуйте.

Утилита в составе инсталляции называется gis-qtchooser.sh, и после установки располагается в /usr/bin.
В следующей версии ГИС Конструктор разное наименование утилиты в документации и в составе будет исправлено.

Для диагностики используемых версий библиотек можно воспользоваться утилитой ldd, например, с помощью команды:

[CODE]ldd /usr/lib/libmapcomponents.so[/CODE]
realloc(): invalid pointer, Программа неожиданно завершилась. Процесс был завершён принудительно.
 
Данная утилита присутствует во всех инсталляциях с несколькими комплектами библиотек под разные версии Qt.

Обратите внимание что, для запуска утилиты требуются права суперпользователя. Без данных прав она может быть не доступна. Пример команды запуска утилиты с правами суперпользователя может выглядеть следующим образом:

[CODE]sudo gis-qtchooser -i[/CODE]

Используемый комплект библиотек ГИС Конструктор меняется пользователем с помощью утилиты gis-qtchooser.

realloc(): invalid pointer, Программа неожиданно завершилась. Процесс был завершён принудительно.
 
Здравствуйте.

В выводе gdb присутствуют вызовы функций из библиотек Qt5, что может являться причиной данного поведения. Пожалуйста, убедитесь что:
- при сборке приложения происходит линковка только с используемой версией библиотек Qt;
- выбран комплект библиотек ГИС Конструктор для указанной версии Qt с помощью утилиты gis-qtchooser.

Описание смены комплекта библиотек с помощью утилиты gis-qtchooser приводится в п.3.3 [URL=https://gistoolkit.com/download/doc/gisdesigner_sysprog.pdf]Руководства системного программиста[/URL].

mapPaintMapObjectToDib не рисует в буфер, При отрисовки объекта карты не рисуется в память
 
Здравствуйте.

Выполнили проверку с помощью следующего кода:

[CODE]#include <iostream>

#include <mapapi.h>
#include <maptype.h>
#include <longstring.h>

typedef struct MYBITMAPFILEHEADER
{
   unsigned short int bfType;
   char               bfSize[4];
   char               bfReserved1[2];
   char               bfReserved2[2];
   char               bfOffBits[4];
}

MYBITMAPFILEHEADER;

int SaveBufToBmpFile(int loadwidth, int loadheight, int bits, const char* inbuf,
                                                           const char* filename)
{
 if ((inbuf == 0) || (filename == 0)) return 0;

 int mywidth = loadwidth;
 int myheight = loadheight;

 // размер сжимаемой области
 int imagebits = bits / 8;
 int myjpgsize = mywidth*myheight*imagebits;
 int widthlen = mywidth*imagebits;

 BITMAPINFOHEADER biheader;
 MYBITMAPFILEHEADER bfheader;

 memset(&bfheader, 0, sizeof(bfheader));

 //инициализация заголовка
 bfheader.bfType = 0x4D42;
 int filesize = 54 + myjpgsize;
 *((long*)(bfheader.bfSize)) = filesize;
 *((long*)(bfheader.bfOffBits)) = 54;

 //инициализация картинки
 biheader.biSize = 40;
 biheader.biWidth = mywidth;
 biheader.biHeight = myheight;
 biheader.biPlanes = 1;
 biheader.biBitCount = bits;
 biheader.biCompression = 0;
 biheader.biSizeImage = myjpgsize;
 biheader.biXPelsPerMeter = 3780;
 biheader.biYPelsPerMeter = 3780;
 biheader.biClrUsed = 0;
 biheader.biClrImportant = 0;

 TLongString buffer;
 buffer.Append((const char *)&bfheader, 14);
 buffer.Append((const char *)&biheader, 40);
 //запись несжатых данных в поток
 char* currentstr = 0;
 for(int ii = 0; ii < myheight; ii++)
 {
   currentstr = (char *)inbuf + widthlen*(myheight - ii - 1);
   buffer.Append((const char *)currentstr, widthlen);
 }
 HANDLE file = OpenTheFile(filename, 0, FILE_SHARE_READ|FILE_SHARE_WRITE, CREATE_ALWAYS);

 if(file == 0)
   return 0;

 long res;
 int ret = WriteTheFile(file, buffer.getString(), buffer.getSize(), &res);
 CloseTheFile(file);
 return ret;
}

HOBJ createGDIObject(HMAP map, long size)
{
 HOBJ hobj = mapCreateObject(map, IDDOUBLE2, 0);
 double x = 6166598.10;
 double y = 7412695.27;
 if (hobj != 0)
 {
   if (mapRegisterDrawObject(hobj, 0, LOCAL_LINE) != 0)
   {
     IMGLINE parm;
     memset((void *) &parm, 0, sizeof(parm));
     parm.Color = 0xFF0000;
     parm.Thick = PIX2MKM(10);
     mapAppendDraw(hobj, IMG_LINE, (const char *) &parm);
     mapAppendPointPlane(hobj, x, y, 0);
     mapAppendPointPlane(hobj, x + size, y, 0);
     mapAppendPointPlane(hobj, x + size, y + size, 0);
     mapAppendPointPlane(hobj, x, y + size, 0);
     mapAppendPointPlane(hobj, x, y, 0);
     mapCommitObject(hobj);
   }
   else
   {
     std::cout << "mapRegisterDrawObject error" << std::endl;
   }
 }
 else
 {
   std::cout << "mapCreateObject error" << std::endl;
 }
 return hobj;
}

void paintMapObj(HMAP map, HOBJ hobj)
{
 DFRAME frame;
 mapGetTotalBorder(map, &frame, PP_PICTURE);

 RECT rect;
 rect.left = frame.X1;
 rect.right = frame.X2;
 rect.top = frame.Y1;
 rect.bottom = frame.Y2;

 XIMAGEDESC desc;
 memset((void *) &desc, 0, sizeof(desc));
 desc.Width = rect.right - rect.left;
 desc.Height = rect.bottom - rect.top;
 desc.Depth = 32;
 desc.CellSize = desc.Depth / 8;
 desc.RowSize = desc.Width * desc.CellSize;
 desc.Point = (char *) malloc(desc.Height * desc.RowSize);

 memset((void *) desc.Point, 0, desc.Height * desc.RowSize);

 mapPaintMapObjectToDib(map, desc.Point, desc.Width, desc.Height, &rect, 0, hobj);

 SaveBufToBmpFile(desc.Width, desc.Height, 32,  desc.Point, "test.bmp");

 free((void *) desc.Point);
}

int main(int, char *[])
{
 constexpr const char16_t *mapName = u"test_paintToDib.sitx";
 constexpr const char16_t *rscName = u"military.rsc";

 // create map
 {
   CREATESITEUN createSite{};
   createSite.Length = sizeof(CREATESITEUN);
   createSite.MapType = 16;
   createSite.Reserve = 0;

   HMAP map = mapCreateSiteUn((const WCHAR *) mapName, (const WCHAR *) rscName, &createSite);
   if (!map)
   {
     std::cout << "failed to create (" << mapName << ", " << rscName << ")" << std::endl;
     return 1;
   }
   mapCloseMap(map);
 }

 // reopen map
 HMAP map = mapOpenAnyData((const WCHAR *) mapName);
 if (!map)
 {
   std::cout << "failed to open (" << mapName << ", " << rscName << ")" << std::endl;
   return 1;
 }

 mapSetRealShowScale(map, 10000.);

 // create new draw object
 {
   HOBJ obj = createGDIObject(map, 1000);
   if (!obj)
   {
     std::cout << "createGDIObject failed" << std::endl;
     return 1;
   }
   mapFreeObject(obj);
 }

 mapSetRealShowScale(map, 25000.);

 // paint the objects
 {
   HOBJ obj = mapCreateObject(map, IDDOUBLE2, 0);

   if (!mapReadObjectByNumber(map, 0, obj, 1, 1))
   {
     std::cout << "mapReadObjectByNumber(1) failed" << std::endl;
   }
   else
   {
     paintMapObj(map, obj);
   }

   mapFreeObject(obj);
 }

 mapCloseMap(map);

 return 0;
}[/CODE]

В полученном файле BMP объект отображен корректно.

mapPaintMapObjectToDib не рисует в буфер, При отрисовки объекта карты не рисуется в память
 
Здравствуйте.

Исправление было включено в данный выпуск. Пожалуйста, проверьте поведение и сообщите о результатах.
Создание, открытие, отображение карты, Создание, открытие, отображение карты
 
[QUOTE]Алексей Scout написал:
Попробуем еще раз.
Я не использую ни QDmap ни QScrollArea и другие Кьютишные элементы. Есть интерфейс написанный на Иксах и в нем есть окно для отображения карты. Остальные объекты окна рисуются поверх карты и на карту не наносятся.
 [/QUOTE]
Поскольку Вы не используете графические компоненты из состава ГИС Конструктор, то обратите внимание на пример mapview. Вместо использования компонента QScrollArea Вы можете использовать два скроллбара (например, найти аналоги QScrollBar в X Window).
При этом в виджете отображения карты необходимо хранить текущее положение отображаемой области.

Функции изменения масштаба рассматриваются в пунктах 3.6.3 «Открытие и создание пользовательских карт» и 3.6.4 «Управление визуализацией и печатью» [URL=https://gistoolkit.com/download/doc/gisdesigner_prog.pdf]Руководства программиста[/URL].
Пример расчета масштаба, необходимого для отображения всей карты в текущем окне, реализован в методе SetScaleAllMapInWindow компонента QDMapViewWindow (qdmwina.cpp входит в состав инсталляции ГИС Конструктора).
Возможность изменить кнопки в диалоге formSeekObject на png, при разработке под разные платформы используем Qt, иконки на кнопках подгружаются либо на черном фоне, либо не подгружаются совсем
 
Здравствуйте.

Для иконок кнопок в указанном диалоге уже используется формат PNG.

Поддержка Qt реализована и проверена в ОС Linux  в изделии ГИС Конструктор для Qt Designer. В GIS ToolKit поддерживаются и тестируются приложения, собранные в средах Embarcadero и Visual Studio.
Для отличных сред могут возникать какие-либо особенности при работе приложений. Похожий вопрос рассматривался в данном [URL=https://gisweb.ru/forum/messages/forum2/topic10160/message77096/10160-ne-vyzyvaetsya-dialog-vybora-semantiki-iz-spiska_-vnutri-rscshowstatisticobject#message77096]сообщении[/URL].

mapPaintMapObjectToDib не рисует в буфер, При отрисовки объекта карты не рисуется в память
 
Здравствуйте.

Поведение повторили.
Изменения войдут в следующую версию GIS ToolKit  - о выходе оповестим Вас в этой теме.

Добавление GeoTIFF в .map карту
 
Здравствуйте.

Загрузка файла TIFF в RSW может происходить несколькими способами:
- без копирования изображения в файл RSW (в данном случае требуется наличие одноименного исходного файла рядом с файлом RSW);
- с копированием изображения в файл RSW (наличие исходного файла не требуется).

При использовании функции picexGetAccessToGraphicFileUn происходит загрузка без копирования изображения в формат RSW согласно описанию данной функции.
Поэтому в разрабатываемом приложении необходимо формировать имя RSW в формате <имя_файла_TIFF>.rsw одним из следующих способов:
- передавать в параметрах одноименные файлы RSW и TIFF;
- переименовывать исходный файл после вызова функции.

Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 20 След.



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

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