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

Зона вокруг объекта

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1
RSS
Зона вокруг объекта, Зона объекта
 
Здравствуйте господа, разработчики!!!
Мне необходимо реализовать функцию графического отображения зоны охвата нанесенной на карту радиостанции.
т.е. я наношу на карту радиостанцию и автоматически появляется зона охвата связи (картинка).
А при переносе объекта радиостанции зона охвата переносится вместе с ней.
Я пишу на C# с использованием GIS ToolKit 11.

Подскажите пожалуйста как это реализовать, я смотрел есть много кодов, но на C# подобного нет.
Вот мой код

if (MapObj.Local == TxObjectLocal.OL_VECTOR) // Добавление векторного объекта
               {
                   MapPoint.PlaceInp = TxPPLACE.PP_PICTURE;
                   MapPoint.SetPoint(x1, y1);
                   MapObj.Metric.Append(0, MapPoint.C_CONTAINER);
                   MapObj.CommitAsNew();
                   MapView.Refresh();

                   MapObj.CreateObjectByKey(1, (int)TxMetricType.IDDOUBLE2, "S0000001499");
                   MapObj.Metric.Append(0, MapPoint.C_CONTAINER);
                   MapObj.CommitObject();

                   MapObj.CreateZoneObject(1000, 0, 0);
                   MapObj.CommitObjectAsNew();
                                       
               }
Снимок.PNG (4.75 КБ)
 
По сути у Вас два объекта карты, которые Вы по своей логике хотите объединить.
Такое объединение Ваша прикладная часть должна соответствующим образом обрабатывать ("при переносе объекта радиостанции зона охвата переносится вместе с ней", при удалении, видимо, - удаляться и т.д.).

Объединить объекты можно на уровне приложения, то есть в Вашем приложении как то запомнить, какой объект какому подчиняется.
А можно на уровне карты, записав в атрибуты объектов ссылки друг на друга.
Обрабатывать это "объединение" в любом случае придется снаружи - в приложении.
Для объединения объектов Вы можете использовать свои семантические характеристики и обрабатывать их самостоятельно, либо использовать штатные средства группировки объектов.

Среди наших технологий работы с пространственными объектами есть понятие "набор объектов".
Объединение объектов в набор осуществляется по тому же принципу - установке взаимных ссылок у объектов в семантических характеристиках.
Для наборов объектов предусмотрены служебные семантики, а также есть набор MAPAPI-методов по работе с ними: см. описание в справочной системе.

На уровне компонент GIS ToolKit Active работа с наборами объектов не реализована, то есть придется использовать вызовы MAPAPI.
 
Добрый вечер!
Наконец то я дошел до реализации данного функционала, и у меня появилось куча вопросов)))

// Построение группы из объектов карты

// по существующей в объекте групповой семантике

// hobjset - указатель на набора объектов

// info    - идентификатор объекта карты

// При ошибке возвращает 0

_MAPIMP long int _MAPAPI mapBuildObjectSet(HOBJSET hobjset, HOBJ info);

1. hobjset - указатель на набора объектов ---- что это за указатель и где его найти ??
2. по существующей в объекте групповой семантике --- что это за групповая семантика ??
3. взаимные ссылки --- что это такое???

Мои предположения таковы, что я наношу на карту по координатам объект-радиостанцию и записываю в переменную параметр info.
Далее я выполнив расчеты по вычислению радиуса дальности связи наношу объект-круг и записываю в переменную параметр info.
Потом используя функцию mapBuildObjectSet(HOBJSET hobjset, HOBJ info) объединяю их в группу.

Правильно ли я рассуждаю??
 
Цитата
Александр Махин написал:
Правильно ли я рассуждаю??

Нет.

Для
Цитата
Александр Махин написал:
1. hobjset - указатель на набора объектов ---- что это за указатель и где его найти ??

Это указатель на объект, создаваемый в ГИС-ядре для работы с набором объектов.
Надо поработать - создали (mapCreateObjectSet), больше не нужен - надо удалить (mapFreeObjectSet).

mapBuildObjectSet - метод, позволяющий заполнить hobjset по уже имеющемуся объекту карты, который является членом набора объектов.

Цитата
Александр Махин написал:
2. по существующей в объекте групповой семантике --- что это за групповая семантика ??
3. взаимные ссылки --- что это такое???

Объединение объектов в наборы осуществляется заполнением их служебных характеристик: главный объект группы - семантика 32801, подчиненный объект группы - семантика 32802.

Их можно заполнить и самостоятельно, не используя hobjset.

Или воспользоваться функциями mapObjectSetAppendGeneral и mapObjectSetAppendSubordinate.


Подробнее по функциям работы с наборами объектов см. тут.
 
Добрый день!

У меня сразу пару вопросов:1. Подскажите пожалуйста может ли функция mapZoneObject строить зону вокруг ВЕКТОРНОГО объекта ?
2. Можно ли создать векторный объект (окружность или круг), у которого можно будет изменять радиус определенной семантикой ?
 
Цитата
Александр Махин написал:
1. Подскажите пожалуйста может ли функция mapZoneObject строить зону вокруг ВЕКТОРНОГО объекта ?

Да.
Но mapZoneObject устаревшая функция. Используйте:

Цитата
// Построение зоны вокруг подобъекта
// radius  - радиус создаваемой зоны (в метрах на местности)
// info    - идентификатор копии объекта, по метрике которого строится зона.
//           В этот объект будет записана метрика построенной зоны.
// subject - номер подобъекта, вокруг которого строится зона
// form    - тип угла 0 - прямой, 1 - закругленный
// arcdist - расстояние между точками по дуге (в метрах на местности)
//           рекомендуется radius / 15
// cornerfactor - коэффициент для расчета максимальной длины угла (рекомендуется 3)
// Если задан прямой тип угла, то внешний угол обрезается по расстоянию от узла по
// допуску radius*cornerfactor для устранения длинных углов
// side    - направление построения зоны (1-справа, 2-слева, 3-с обеих сторон)
// При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapZoneObjectEx(double radius, HOBJ info, long int subject,
                                        long int form, double arcdist, double cornerfactor,
                                        long int side);


Цитата
Александр Махин написал:
2. Можно ли создать векторный объект (окружность или круг), у которого можно будет изменять радиус определенной семантикой ?

Можно. Но подобные вещи выходят за рамки штатного функционирования и реализуется с помощью программируемых условных знаков.
Вы пишите библиотеку пользовательских условных знаков (IML) и подключаете ее к классификатору карты.

Немного о технологии тут.

Как писать библиотеки - тут.
Есть примеры в составе SDK12. SDK потребуется и при разработке своей библиотеки IML.

Это довольно сложная тема.
Поэтому, если у Вас созданием ваших объектов занимается Ваша прикладная программа, то проще возложить на нее функции создания площадных зон и другие прикладные задачи.
Но если решитесь делать свою библиотеку IML и появятся вопросы, спрашивайте - подскажем.
Страницы: 1
Читают тему (гостей: 1)



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

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