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

Andrey Gheleznyakov (Все сообщения пользователя)

Поиск  Пользователи  Правила  Войти
Форум » Пользователи » Andrey Gheleznyakov
Выбрать дату в календареВыбрать дату в календаре

Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 280 След.
Как отрисовать объект из классификатора
 
У объекта карты есть служебная семантика с кодом 31007 - Вес цвета объекта в процентах.
1С8.3 и GIS ToolKit Active: Выделение объектов, Интеграция GIS ToolKit Active в 1С8.3 Выделение объектов
 
[QUOTE]Анатолий Рогатнев написал:
   В этом случае ничего не нужно программировать, просто должно правильно работать, также, как это  работает в ГИС Панорама и ГИС Мини ![/QUOTE]
Программировать нужно, так как кнопка - она на вашей форме: может быть +, а может быть Добавить и т.п. Это зависит от проекта.
От нашего ядра зависит обеспечить АПИ. Для выделения конкретного объекта в документации есть такая информация:[TABLE][TR][TD] Объект aiMapSelect[/TD][TD][/TD][/TR][/TABLE][TABLE][TR][TD]

Объект  условий поиска/отображения.

[/TD][/TR][/TABLE]Критерии отбора можно указывать как по обобщенным характеристикам объектов карты
(классификационный код, наличие определенных атрибутов, тип …), так и явно
указывая конкретные объекты с помощью специального списка. Заполняет такой
список функция SelectSample

Добавить/Удалить в(из)  список выделенных объектов карты.

function SelectSample(seting : boolean; listname : string;  key : integer) : integer;

Описание:  

Функция добавляет  (при seting = true) или удаляет (при seting=false) из списка выделенных объектов  объект карты с уникальным номером key в листе с именем listname. Список выделенных объектов  используется при групповом выделении объектов карты (axcMapView.SetViewSelected).

При невозможности добавления  или удаления функция возвращает 0.

Применяется ко всему списку  доступных в данный момент axcMapView карт.

Внимание! Если SelectSample применяется не ко всем открытым в axcMapView картам, то в список выделенных объектов  попадают указанные в SelectSample объекты тех карт, к которым применялась  функция, и все объекты из контекста выделения остальных карт. Для того чтобы в  список выделенных объектов вошли только указанные в SelectSample обекты, необходимо вызвать метод SetSiteEnabledForSample.

Для очистки списка  выделенных объектов используется метод ClearSampleAll.

Таким образом при выборе объекта на карте (с диалогом или без) Вы сами определяете удалять из списка или добавлять - это логика Вашего приложения.

Как отрисовать объект из классификатора
 
После Commit Вы можете определить уникальные параметры объекта

GetKey- Запросить уникальный номер объекта
GetListName- Запросить название номенклатурного листа, на котором расположен
объект карты

Для удаления:
1. SeekObject - Найти объект карты по его уникальным параметрам
2. Delete - Удалить объект из карты.

Вместо вызова методов компонентов рекомендую использовать аналогичные вызова АПИ функций ГИС-ядра. В результате получается программный код, который гораздо более платформо независимый.
Отображение объекта из классификатора
 
Необходимо создать карту с нужным классификатором и открыть ее дополнительно к текущей. Можно создать временную карту.
Как адекватно построить зоны обнаружения для нескольких точек
 
Построить зоны для каждой точки с разными именами. Или Вам нужно их пересечение?
Изменено: Andrey Gheleznyakov - 27.11.2023 14:43:45
1С8.3 и GIS ToolKit Active: Выделение объектов, Интеграция GIS ToolKit Active в 1С8.3 Выделение объектов
 
[QUOTE]Анатолий Рогатнев написал:
У меня в 1С8.3 не получается произвести выделение отдельных строений.[/QUOTE]
Мы уже не раз рассматривали вопросы выделений объектов на карте.
В вопросе отсутствуют детали алгоритма, по которому Вы хотите выделить.
1С8.3 и GIS ToolKit Active: Выделение объектов, Интеграция GIS ToolKit Active в 1С8.3 Выделение объектов
 
[QUOTE]Анатолий Рогатнев написал:
Не работает в ActiveX выделение (снятие выделений) в окна свойств объекта (данные метрики и семантики).![/QUOTE]


Снимать или не снимать выделение - решаете Вы. Компонент работы с параметрами конкретного объекта позволяет объект выбрать. Если объект выбрали, то вы можете снять выделение (убрать из списка выделенных)
В MapSelect есть соответствующий метод. Его описание из документации

aiMapSelect

Добавить/Удалить в(из)  список выделенных объектов карты.

function SelectSample(seting : boolean; listname : string;  key : integer) : integer;

Функция добавляет  (при seting = true) или удаляет (при seting=false) из списка выделенных объектов  объект карты с уникальным номером key в листе с именем listname.

Как отрисовать объект из классификатора
 
Из документации:

void CreateObject(int site, int kind, bool text, int list, int excode, int local);
Процедура создает новый объект карты. Если параметр site=0, то объект создается на
основной карте в листе с номером list, которая открыта в компоненте QDMapView, иначе site
задает порядковый номер карты в списке открытых пользовательских карт. Объекту карты
устанавливается типом метрики kind (см. KIND в maptype.h), внешним кодом excode и характером
локализации local (см. OBJECT_LOCAL в maptype.h).

Для Вашего случая: CreateObject(0. IDDOUBLE2, 0, 90000016, LOCAL_SQUARE)
1С8.3 и GIS ToolKit Active: Выделение объектов, Интеграция GIS ToolKit Active в 1С8.3 Выделение объектов
 
Может Вы условия поиска неправильно задаете? Например, задаете параметр, который означает поиск объектов, которые полностью попадают в область поиска, а ожидаете, что выделятся и те, которые попадают частично, например линейная дорога.
Как отрисовать объект из классификатора
 
Вот часть кода из примера

void MainForm1::MapObjCreateAction_activated()
{
 if ((!ui.DMapView1) || (!ui.DMapPoint1)) return;
 if (!ui.DMapView1->GetMapHandle()) return;

 if (ui.DMapView1->GetMapFileName().contains("Noginsk.sit") == false)
 {
   QString message, caption, namebut;
   message = WcharToQString(WTEXT("Не открыта базовая карта Noginsk.sit"));
   caption = WcharToQString(WTEXT("Создание объекта карты"));
   namebut = WcharToQString(WTEXT("Да"));

   QMessageBox::critical(0, caption, message, namebut);
   return;
 }

 memset((char *)ui.DMapSelectObjectRsc1->FLocals, 0, sizeof(ui.DMapSelectObjectRsc1->FLocals));
 ui.DMapSelectObjectRsc1->FLocals[LOCAL_SQUARE] = 1;
 
 QDMapObj *DMapObj2 = new QDMapObj(centralWidget(), "DMapObj2");
 DMapObj2->SetMapView(ui.DMapView1);
 DMapObj2->CreateNullObj(0);
 MEDRSCPARM medrscparm1;
 memset(&medrscparm1, 0, sizeof(medrscparm1));
 medrscparm1.Regime = MC_POLYLINE;

 if (ui.DMapSelectObjectRsc1->ExecuteForMapObj(DMapObj2, true, &medrscparm1))
 {
   // Установить метрику созданного объекта
   ui.DMapPoint1->SetPlaceIn(PP_PLANE);
   ui.DMapPoint1->SetPoint(6205000, 7456000);
   DMapObj2->VarMetric->Append(0, ui.DMapPoint1->VarMapPoint);
   ui.DMapPoint1->SetPoint(6204600, 7459010);
   DMapObj2->VarMetric->Append(0, ui.DMapPoint1->VarMapPoint);
   ui.DMapPoint1->SetPoint(6203600, 7457860);
   DMapObj2->VarMetric->Append(0, ui.DMapPoint1->VarMapPoint);
   ui.DMapPoint1->SetPoint(6207000, 7456020);
   DMapObj2->VarMetric->Append(0, ui.DMapPoint1->VarMapPoint);

   DMapObj2->Commit(); // запишем объект
   DMapObj2->Center();
 }
 delete DMapObj2;
 DMapObj2 = 0;
}

Тип объекта выбирается в диалоге DMapSelectObjectRsc1->ExecuteForMapObj(DMapObj2, true, &medrscparm1)).
Тип можно задать не в диалоге., а вызовом метода CreateObject

Из документации

Каждый объект векторной карты состоит из описания объекта, метрики объекта, семантики
объекта. Описание объекта векторной карты содержит информацию о классификационном коде,
типе локализации, внутреннем коде. Метрика объекта содержит информацию о его плановом
положении. Семантика объекта содержит набор описательных характеристик. Под
классификационным кодом объекта понимается его учетный номер, заданный в файле
классификатора (.RSC). Локализация объекта задает его вид: точечный, линейный, площадной,
подпись, векторный. Внутренний код объекта – это его учетный номер для функций отображения
векторной карты.
Внутренние коды объектов никогда не повторяются. Внутренний код объекта пользователем
изменяться не может и определяется в момент создания нового вида объекта в файле
классификатора. В общем случае в файле классификаторе можно создать несколько объектов с
одинаковым классификационным кодом, но разным типом локализации. Такие объекты будут
иметь разные внутренние коды.
void CreateObject(int site, int kind, bool text, int list, int excode, int local);
Процедура создает новый объект карты. Если параметр site=0, то объект создается на
основной карте в листе с номером list, которая открыта в компоненте QDMapView, иначе site
задает порядковый номер карты в списке открытых пользовательских карт. Объекту карты
устанавливается типом метрики kind (см. KIND в maptype.h), внешним кодом excode и характером
локализации local (см. OBJECT_LOCAL в maptype.h).
Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 280 След.



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

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