Вы используете функцию: long int _MAPAPI mapAppendSemantic(HOBJ info,long int code, char * value,long int size); Здесь Сode - внешний код характеристики, указанный в классификаторе открытой карты (пользовательской карты), соответственно, название характеристики меняется либо вручную в классификаторе при помощи программы ГИС Интеграция, либо использовать api функиции по работе с классификатором карты такие как: // Создать новую семантику - возвращает код созданной семантики // hRsc - идентификатор классификатора карты // структура RSCSEMANTICEX описана в maptype.h // При ошибке возвращает ноль
long int _MAPAPI mapAppendRscSemanticEx(HRSC hRsc,RSCSEMANTICEX * rsem);
либо:
// Обновить семантику - возвращает код обновленной семантики // code - код обновляемой семантики // classupdate - 1, классификатор семантики удаляется для последующего // обновления // hRsc - идентификатор классификатора карты // структура RSCSEMANTICEX описана в maptype.h // При ошибке возвращает ноль
long int _MAPAPI mapUpdateRscSemanticEx(HRSC hRsc,long int code,
RSCSEMANTICEX * rsem,long int classupdate);
Более подробно можно посмотреть в справке по MapApi Название семантической характеристики изменяется в структуре RSCSEMANTICEX.
// ОПИСАНИЕ СЕМАНТИКИ typedef struct RSCSEMANTICEX // РАСШИРЕННОЕ ОПИСАНИЕ СЕМАНТИЧЕСКОЙ // ХАРАКТЕРИСТИКИ ОБ'ЕКТА { long int Code; // внешний код long int Type; // тип значения long int Reply; // разрешается повторение (1) long int Enable; // допустимая(1),обязательная(2) // (при создании семантики поле не учитывается) long int Service; // служебная,допустима для всех объектов (1) long int Reserv; // резерв (должен быть равен 0) char Name[32]; // название характеристики char Unit[8]; // единица измерения double Minimum; // минимальное значение double Default; // умалчиваемое значение double Maximum; // максимальное значение long int Size; // общий размер поля значения семантики long int Decimal; // точность поля значения семантики char ShortName[16];// короткое имя семантики (связь с полем БД) } RSCSEMANTICEX;
[B]Печать карты под операционной системой МСВС: [/B] [B]Способ №1 Использование библиотек QT [/B] [code] // создаем принтер printer = new QPrinter( QPrinter::ScreenResolution); HDC FmapDC; RECT mapRect; QPainter *p; p = new QPainter(); // создаем изображение равное по размеру области вывода карты QPixmap * pixmap = new QPixmap(MAP->viewport()->width(),MAP->viewport()->height());
if (MAP -> hMap) // если карта открыта заполняем созданное изображение { //изображением карты отображенной на экране
} delete(p); delete(pixmap); delete(printer); [/code] [B]Достоинства данного способа:[/B] 1. Используются только функции QT и функции содержащиеся в библиотеке libmapacces.so 2. Возможности дополнительного редактирования и совершенствования
[B]Недостатки:[/B] 1. При использовании данного примера на печать выводится только область карты видимая на экране. 2. Размер выводимого изображения не превышает размеров экрана, в связи с этим нет возможности детальной печати изображения на листах большого формата (A3-A0 и более) Но указанные недостатки могут быть устранены при использовании достоинства №2.
[B]Способ № 2. Печать с использованием функций MapApi. (Пример взят из файла prnapi.h)[/B] [code] // Загрузить принтер HPRINTER printer = prnLoadPrinter(); // Вызвать диалог печати // (печать выбранного фрагмента карты производится // автоматически при нажатии кнопки "Печать")
ret = prnMapPrint(hmap, printer, printparm, taskparm);
// При успешном выполнении диалога возвращаемое значение не равно 0 if (ret != 0) { // Закрытие диалога при помощи кнопки "Выбрать" if (printparm->Regime == MPR_SELECTFRAME) { // Вызвать пользовательскую функцию выбора прямоугольной области // ... } // Закрытие диалога при помощи кнопки "Изменить" if (printparm->Regime == MPR_CHANGEFRAME) { // Вызвать пользовательскую функцию изменения прямоугольной области // ... } } // Освободить принтер prnFreePrinter(printer); [/code] Более подробно см. prnapi.h
[B]Недостатки: [/B] Данный способ под МСВС реализовать не удалось, так как не удалось найти аналога библиотекам mapprint.dll, gisforms.dll для операционной системы МСВС. Вопрос администрации: Реализована ли подсистема печати при помощи вышеописанных функций? Если да, то в каких библиотеках они размещаются?