[QUOTE]Сергей написал: Вот какие-то иероглифы под текстом явно выравниваются, но не текст.[/QUOTE] Судя по всему какие-то иероглифы - это то, что выводится функцией mapPutText(из исходного примера) и что-то в памяти не чистится, несмотря на то, что удалял физически файл после перезапуска приложения.
[QUOTE]Константин Ганюшин написал: Пожалуйста, если требуется, модифицируйте данный пример для демонстрации некорректного поведения.[/QUOTE] Здравствуйте, спасибо за ответ. Сделал следующие поправки, чтобы воспроизвести мою проблему.
1. Заменил путь(скорее не принципиальная правка) [CODE]HMAP hMap = mapOpenData("/tmp/Noginsk/Noginsk.sit");[/CODE]на[CODE]HMAP hMap = mapOpenData("/usr/Operator11/Data/Noginsk/Noginsk.sit"/*"/tmp/Noginsk/Noginsk.sit"*/); [/CODE]2. Сделал вывод текста в виде юникода путем замены строчки:[CODE]mapPutText(hObj, "Пример текста", 0);[/CODE]на[CODE] WCHAR buf[1024]; Unicode8ToUnicode("Пример текста", buf, sizeof(buf));
mapPutTextUn(hObj, buf, 0); [/CODE] Получил следующую картинку, в которой выравнивание текста не работает:
Невалидный файл проекта qmapcomponents.pro в исходниках для версии [URL=http://gisinfo.ru/download_linux?id=92]ГИС Конструктор для Qt Designer x64 (версия 12.6.1, Qt 4, Qt 5, платформа x64, ОС "Astra Linux Special Edition", релиз "Смоленск")[/URL] выложенной на вашем ресурсе.
Как минимум отсутствуют закрывающие скобки: [CODE]eval (GIS_DOUBLE_QT == true ) { greaterThan(QT_MAJOR_VERSION, 4) {
[/CODE]После того, как я закомментировал этот код, а также использование designer для Qt5, т.к. почему-то не находит он у меня в астре этот модуль и попытался собрать, выдало следующие ошибки: [QUOTE]g++ -c -m64 -pipe -O2 -D_REENTRANT -Wall -W -fPIC -DHIDE_3DSUPPORT -DHIDE_GISSERVER_SUPPORT -DHIDEMAXMIN -DQT_NO_DEBUG -DQT_PLUGIN -DQT_PRINTSUPPORT_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I. -isystem /usr/include/gisdesigner -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtPrintSupport -isystem /usr/include/x86_64-linux-gnu/qt5/QtWidgets -isystem /usr/include/x86_64-linux-gnu/qt5/QtGui -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++-64 -o qdmdlist.o qdmdlist.cpp g++ -c -m64 -pipe -O2 -D_REENTRANT -Wall -W -fPIC -DHIDE_3DSUPPORT -DHIDE_GISSERVER_SUPPORT -DHIDEMAXMIN -DQT_NO_DEBUG -DQT_PLUGIN -DQT_PRINTSUPPORT_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I. -isystem /usr/include/gisdesigner -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtPrintSupport -isystem /usr/include/x86_64-linux-gnu/qt5/QtWidgets -isystem /usr/include/x86_64-linux-gnu/qt5/QtGui -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++-64 -o qdmdcmtw.o qdmdcmtw.cpp qdmdcmtw.cpp:6:3: error: ‘PRIORMTRPARM’ does not name a type make: *** [qdmdcmtw.o] Ошибка 1 [/QUOTE]
Изменено: Сергей - 23.10.2019 14:51:14(Более детальное описание)
я создаю объект на карте используя функцию mapRegisterObjectByKey, а далее добавляю объекту метрику в точках клика.
Можете привести пример, как например, создать площадной объект с неким кодом 'xxxxx' в форме окружности с радиусом 1 км, например, и в форме прямоугольника по 2 точкам для наглядности.
Заранее спасибо.
Изменено: Сергей - 22.10.2019 18:10:21(Вставил картинку, как ссылку на внешнем ресурсе. Не понял, как вставить картинку напрямую.)
[QUOTE]Vladimir Letov написал: Под растровым видом Вы подразумеваете экранный? Для отображения принтерного вида, необходимо еще установить функции обратного вызова, которые будут обращаться к Qt для улучшенного отображения. Установка функций обратного вызова для принтерно-растрового отображения выполняется при вызове конструктора QDMapView[/QUOTE] Здравствуйте, Владимир. Да, поправил в вопросе, имеется ввиду экранный вид. Я не использую визуальные компоненты, поэтому использование QDMapView не подходит, насколько понимаю.
Версия Гис Конструктор для Qt Designer(MAPAPIVERSION = 0x111015, MAPACCESSVERSION = 20130912).
Устанавливаю "принтерный растровый" вид отображения карты, но отображается явно экранный вид. Пример кода: [CODE]// Устанавка "принтерного растрового" вида отображения карты const auto r = mapSetViewType(mapHandler, VT_PRINTRST); const auto rr = mapGetViewType(mapHandler); qDebug () << Q_FUNC_INFO << "new value:" << rr << "old value:" << r; // rr=VT_PRINTRST
// вызов функции отрисовки auto errCode = mapPaintToXImage(mapHandler, &imageDescr, 0L, 0L, &rectDraw); qDebug() << Q_FUNC_INFO << mapGetViewType(mapHandler); // после вызова mapPaintToXImage mapGetViewType возвращает значение = VT_SCREEN[/CODE]Как отрисовать карту в принтерном виде?
Спасибо.
Изменено: Сергей - 22.10.2019 11:37:33(растровый -> экранный вид)
[QUOTE]Константин Ганюшин написал: Одним из способов решения данной задачи может быть редактирование классификатора,[/QUOTE] Спасибо. Видимо, так и придется сделать, другого способа пока, увы, никто не предложил, как в кратчайшие сроки это можно поправить.
// Версия библиотеки MapAccess #define MAPACCESSVERSION 20130912
// Версия интерфейса MAPAPI и ядра библиотеки #define MAPAPIVERSION 0x111015
На данной версии текст выравнивается только по левой стороне независимо от выставляемых флагов. Можно ли это как-то обойти, не обновляясь до более новой версии?
В то же время выравнивание работает нормально под Windows в GIS ToolKit следующей версии:
// Версия библиотеки MapAccess #define MAPACCESSVERSION 20160907
// Версия интерфейса MAPAPI и ядра библиотеки #define MAPAPIVERSION 0x0111305
Изменено: Сергей - 18.10.2019 11:37:33(Добавление информации по версии для Windows)
Вы не могли бы прислать классификатор, на котором проявляется проблема с отрисовкой подписи внутри знака, и указать номер объекта. Спасибо![/QUOTE] Здравствуйте! Отправил классификатор на почту.