Приветствую!
Используем ГИС Конструктор для Qt Designer x64 (версия 12.6.1), ОС Astra Linux
Появилась необходимость объединить несколько sxf-файлов в один sitx. Однако, если сначала импортировать карту с помощью ImportFromAnySxfEx, а затем добавить ее с помощью UpdateFromAnySxf, то импортированные знаки не совпадают.
Код для воспроизведения:
С уважением,
Александр Попов
Используем ГИС Конструктор для Qt Designer x64 (версия 12.6.1), ОС Astra Linux
Появилась необходимость объединить несколько sxf-файлов в один sitx. Однако, если сначала импортировать карту с помощью ImportFromAnySxfEx, а затем добавить ее с помощью UpdateFromAnySxf, то импортированные знаки не совпадают.
Код для воспроизведения:
Код |
---|
#include <QString> #include <QDebug> #include <QImage> #include "mapapi.h" #include "sitapi.h" #include "rscapi.h" #include "mapcreat.h" #include "maptype.h" #include "vecexapi.h" long int msgHangler(long int hwnd, long int code, long int p1, long int p2, long int typemsg){ return 0; } void saveMap(HMAP hsite, QString filename) { XIMAGEDESC desc; DFRAME frame; mapGetTotalBorder(hsite, &frame, PP_PICTURE); RECT rect; rect.left = frame.X1 + 1300 ; rect.right = frame.X2/10; rect.top = frame.Y1 + 2000; rect.bottom = frame.Y2/10; memset((void*) &desc, 0, sizeof(desc)); desc.Width = rect.right - rect.left; desc.Height = rect.bottom - rect.top; desc.Depth = mapGetMapScreenDepth(); desc.CellSize = desc.Depth / 8; desc.RowSize = desc.Width * desc.CellSize; desc.Point = (char*) malloc(desc.Height * desc.RowSize); mapPaintToXImage(hsite, &desc, 0,0, &rect); QImage im2((const uchar*) desc.Point, desc.Width, desc.Height, desc.RowSize, QImage::Format_RGB32); if (!im2.save("/tmp/" + filename, "PNG")) { qDebug() << "file 2 save error"; } free(desc.Point); } int main() { QString sxfName("/tmp/sxf/G-44-12.SXF"); QString mapName("/tmp/sxf/G-44-12.sitx"); QString rscName("/tmp/sxf/200t05g.rsc"); long rc = ImportFromAnySxfEx(0, sxfName.toLatin1().constData(), rscName.toLatin1().constData(), mapName.toLatin1().data(), mapName.length()-2,&msgHangler,0, 0); if(rc == 0) { qDebug() << " ==== Import Error"; return 0; } HSITE hsite = mapOpenAnyData((const WCHAR*) mapName.constData()); mapSetRealShowScale(hsite, 10000); saveMap(hsite, "1.png"); rc = UpdateFromAnySxf(hsite, sxfName.toLatin1().constData(), mapName.toLatin1().data(), mapName.length(), &msgHangler, 0,2); if(rc == 0 ) { qDebug() << " ==== Update Sxf Error"; return 0; } saveMap(hsite, "2.png"); mapCloseData(hsite); } |
С уважением,
Александр Попов