Добрый день! Подскажите пожалуйста есть ли возможность добавить на карту собственные изображения, например в формате png? Или есть возможность только простенькие векторные изображения наносить на карту?
Здравствуйте! Я имею ввиду создание собственного знака, чтобы в последствии можно было добавлять его на карту, вместо уже имеющегося набора классификаторов.
Грубо говоря, мне необходимо добавлять на карту свои звездочки, стрелочки, домики и т.п. Как я поняла, при добавлении собственных классификаторов есть возможность нарисовать только самое примитивное изображение.
Вам может подойти загрузка растрового изображения знака непосредственно в классификатор: для этого нужно добавить новый точечный знак с типом отображения "Графический файл" и выбрать путь к файлу изображения.
Также имеется возможность создания собственного графического объекта с функцией визуализации IMG_GRAPHICMARK (mapgdi.h):
Код
#define IMG_GRAPHICMARK 165 // Знак из файла (ВМР, Metafile )
Более подробно о создании графических объектов можно посмотреть в разделе "4.2.18 Создание графических объектов на карте" документа "ГИС Панорама. Руководство программиста": http://gistoolkit.ru/download/doc/mapapi.pdf
Есть 2 способа нанесения любых знаков на цифровую карту. Первый - через описание знака в классификаторе и присвоение создаваемому объекту заданного кода и набора характеристик (например, ссылки на графический файл). Второй - создание графического объекта с присвоением графических параметров программно каждому экземпляру объекта.
Оба примера можно посмотреть на карте \Shape\shape.sitx, которая входит в инсталляцию ГИС Карта 2011, ГИС Панорама 12 (обе программы для Windows) и ГИС Оператор для Linux. Там есть графические объекты типа PNG с присвоением в семантике объекта имени файла PNG, и есть знак PNG, который запоминается в классификаторе RSC и отображается у всех экземпляров объектов с заданным кодом.
Правильнее организовать разработку так, чтобы не тратить время на программирование знаков, а включить их в классификатор и далее решать прикладную задачу, оперируя объектами и их свойствами, а не графическими файлами.
Единственное, что я пока не нахожу, где в редакторе классификаторов при создании нового классификатора задать в качестве характеристик путь к месту где лежит мой png файл. Можете мне пожалуйста пояснить или лучше сказать, где можно об этом прочесть.
Также уточните пожалуйста при создании собственного классификатора по какому критерию ему номер присваивать? Какой интервал номеров уже занят служебными классификаторами?
Можете привести пример, как программно можно задать свой классификатор с определенным изображением. Чтобы потом далее в программе я могла зная его уникальный идентификатор нанести его на карту.
Добрый день! из примера в \Shape\shape.sitx меня интересует как были созданы стелочки (Вектор направления и силы) под ними подпись - Векторный знак с длиной и углом, заданными в семантике. Есть пример как создавать эти стрелочки? Я пробовал сделать это через IMGVECTOREX, но увы у меня не вышло
Чтобы узнать как рисуется любой знак можно выбрать мышкой на карте соответствуюший объект (знак) и в диалоге Выбор объекта перейти в закладку Вид. В данном случае Вы увидите: Программируемый вид, библиотека - shape.iml, функция - Знак с длиной и поворотом по семантике. Если войдете в Параметры, то увидите 3 позиции: сам знак - стрелочка, семантика - угол поворота - 6666, длина в мм - 7788. При изменении значений этих семантик будут меняться угол поворота и длина знака. Если в параметрах установить другие номера семантик, то вид будет зависеть от них. Если вместо стрелочки задать другое изображение (например, самолет), то будет другой знак. Будут влиять и другие служебные семантики - ЦВЕТ ЗНАКА, МАСШТАБ ЗНАКА (SEMIMAGESCALE 31001, SEMIMAGECOLOR 31002) и т.д.
#define IMG_MARKALONGLINE 1 // ЗНАК ВДОЛЬ ЛИНИИ
#define IMG_HORIZONTALSHADE 2 // ГОРИЗОНТАЛЬНАЯ ШТРИХОВКА
#define IMG_MIRRORMARKALONGLINE 3 // ЗЕРКАЛЬНЫЙ ЗНАК ВДОЛЬ ЛИНИИ
#define IMG_MARKINTOLINE 4 // ЗНАК ВНУТРИ ЗЕРКАЛЬНОЙ ЛИНИИ
#define IMG_TURNMARK 5 // ЗНАК, С ПОВОРОТОМ - УГОЛ В СЕМАНТИКЕ
#define IMG_UNIVERSALTEXT 6 // ТЕКСТ С ПАРАМЕТРАМИ ИЗ СЕМАНТИКИ
#define IMG_SCALEVECTOR 7 // МАСШТАБИРУЕМЫЙ ВЕКТОРНЫЙ
#define IMG_THICKENLINEEX 8 // УТОЛЩЕННЫЙ ЛИНЕЙНЫЙ
#define IMG_MIDDLETHICKENLINEEX 9 // УТОЛЩЕННЫЙ ЛИНЕЙНЫЙ В СЕРЕДИНЕ
#define IMG_MARKANDNOTE 10 // Знак с выноской
#define IMG_SHADOWOBJECT 11 // Объект с тенью
#define IMG_COLORSHADOWOBJECT 12 // Объект с цветной тенью
#define IMG_DOUBLETHICKENLINE 14 // УТОЛЩЕННЫЙ ЛИНЕЙНЫЙ ПО ВСЕЙ ЛИНИИ
#define IMG_POLYARC 15 // ДУГА ПО ЛОМАННОЙ
#define IMG_THICKENDOTLINE 16 // УТОЛЩЕННЫЙ ПУНКТИР
#define IMG_TURNANDLENGTHMARK 17 // ЗНАК С ПОВОРОТОМ И ДЛИНОЙ ПО СЕМАНТИКЕ
#define IMG_LENGTHANDANGLELINE 18 // ЛИНИЯ С ПОДПИСЬЮ ДЛИНЫ
#define IMG_GRADIENTCIRCLE 19 // ОКРУЖНОСТЬ ПО ДВУМ ТОЧКАМ С ГРАДИЕНТНОЙ ЗАЛИВКОЙ
#define IMG_SCALELIMITEDIMAGE 20 // ЗНАК, РИСУЕМЫЙ ПРИ ЗАДАННЫХ МАСШТАБАХ
#define IMG_QUARTER 21 // ПРИПОДНЯТЫЙ МНОГОУГОЛЬНИК
#define IMG_IMAGEVIEW 22 // ОТОБРАЖЕНИЕ ГРАФИЧЕСКИХ ФАЙЛОВ
У всех функций параметры в IMGDRAW. В данном случае - IMGVECTOREX и два IMGLONG.Но проще и технологичнее применять знаки через классификатор RSC.
а можно тут привети пример кода? которым были созданы эти стрелки хотелось бы не использовать ваши библиотеки Sdk, а именно код которым я смогу создать объекты IMGVECTOREX (потому что IMGVECTOR в mapgdi.h нет) и нанести их на карту.
Эти стрелочки были созданы в Редакторе классификатора. Базовый способ работы с картой - применение классификатора объектов и их атрибутов и управление их видом через изменение атрибутов. Программист не должен задумываться над управлением цветом, размером и т.п. Это задача проектировщика цифрового классификатора. Возможность интерактивно ввести сложный знак мы предоставили. Исходные тексты в SDK.