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

1С8.3 и GIS ToolKit Active: Выделение объектов

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1 2 3 4 5 ... 23 След.
RSS
1С8.3 и GIS ToolKit Active: Выделение объектов, Интеграция GIS ToolKit Active в 1С8.3 Выделение объектов
 
Анатолий Рогатнев  
Изменено: Andrey Gheleznyakov - 26.10.2023 08:11:49
 
Добрый день !

Подскажите, какие компоненты  GIS ToolKit ActiveX обеспечат выделение мышью объектов на карте и считывание выделенных объектов в 1С8.3.

Продемонстрируйте пример на 1с8.3 .
 
Добрый день !

Подскажите как с помощью  axMapEditMetric компоненты  GIS ToolKit ActiveX создать точечный и линейный объекты.

Продемонстрируйте  примеры на 1с8.3.    
 
Создание объектов карты различной локализации с помощью axMapEditMetric отражено в теме "GIS ToolKit Active Создание объекта карты в 1С".
Не задавайте абсолютно разные вопросы в одной теме: Выделение объектов - одна тема, Создание объектов - другая.
 
За групповое выделение объектов отвечает MapSelect (можно выделить все объекты, доступные в MapSelect методом axMapView.SetViewSelected), а можно выделить по рамке. В axMapSelect можно указать конкретные объекты карты, параметры которых, например, содержатся в справочнике 1С (имя листа и номер или определенная семантика).  
 
Пример группового выделения нескольких объектов на языке Паскаль

mvMap - это компонент MapView

procedure TfrmFind.btnSelectGroupClick(Sender: TObject);
var
listname,str : string;
issamp,icount : integer;
ret : integer;
al, at : integer;
begin

listname := "Ногинск(граф дорог)";

mvMap.ViewSelect.ClearSampleAll;
    ret := mvMap.ViewSelect.SelectSample(true, listname, N_OBJ_NUMB1);
    if ret > 0
      then inc(issamp);

    ret := mvMap.ViewSelect.SelectSample(true, listname, N_OBJ_NUMB2);
    if ret > 0
      then inc(issamp);

    ret := mvMap.ViewSelect.SelectSample(true, listname, N_OBJ_NUMB3);
    if ret > 0
      then inc(issamp);

    mvMap.SetViewSelected(true, clAqua);
    icount := mvMap.ViewSelect.GetSampleCount(0,1);
     end
     else mvMap.SetViewSelected(false, clAqua);

    ShowMessage('Выделено ' + inttostr(icount) + ' объекта(ов)');

end;
Изменено: Andrey Gheleznyakov - 26.10.2023 08:27:46
 
Пример на 1С

Процедура Выделить3ОбъектаНажатие(Элемент)
// Пример группового выделения нескольких объектов
// Выделить три объекта, зная название карты и номера объектов
карта1 = ЭтаФорма.ЭлементыФормы.axMapView1;

   карта1.ViewSelect.ClearSampleAll(); // очистим параметры поиска

   название_карты = "Ногинский район";        
   icount = 0;

ret = карта1.ViewSelect.SelectSample(Истина, название_карты, 104007); // автодорога
Если ret = 0 Тогда
Сообщить("Объект с номером 104007 не найден");
   Возврат;
КонецЕсли;
   icount = icount + 1;

ret = карта1.ViewSelect.SelectSample(Истина, название_карты, 35695); // квартал
Если ret = 0 Тогда
Сообщить("Объект с номером 68512 не найден");
   Возврат;
КонецЕсли;
   icount = icount + 1;

ret = карта1.ViewSelect.SelectSample(Истина, название_карты, 18299); // озеро
Если ret = 0 Тогда
Сообщить("Объект с номером 187140 не найден");
   Возврат;
КонецЕсли;
   icount = icount + 1;

clAqua = 16776960;  
clRed  = 255;
   карта1.SetViewSelectedEx(Истина, clRed);

карта1.ViewScale = 25000;

// спозиционируем первый объект в центр окна
   карта_объект = ЭтаФорма.ЭлементыФормы.axMapObj1;
Если карта_объект.SeekObject(название_карты, 104007) <> 0 Тогда
карта_объект.Center();
КонецЕсли;

Сообщить("Выделено " + icount + " объекта(ов)");
КонецПроцедуры
 
Добрый день !

  В приведенном выше ответе показано на 1С, как выделить объекты с известными кодами объектов (хороший пример)... .
  Но как получить перечень объектов (их коды), если у пользователя мышь  ?

Как на языке 1с8.3 вызвать (иметировать) инструмент  ГИС -  "Выделение произвольной областью " (визуально - это мышь выделяющая объекты)  ?
 
 
Что подразумевается под "Выделение произвольной областью"? Координаты произвольной области откуда берутся? Опишите алгоритм действий оператора, который Вы хотите реализовать.
Например, есть компонент получения координат прямоугольной области MapSelectRect. В свойство MapSelect можно установить габариты поиска или координаты области поиска, которые можно взять
из компонента MapObj. Можно выстроить такой алгоритм:
- axMapEditMetric - создается площадной объект (это и будет область поиска), объект в карту не записывается.
- метрика области поиска из axMapEditMetric.MapObj переносится в MapSelect.
Далее можно искать по области, можно выделять по области.

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

aiMapSelect

Установить параметры  поиска/выделения объектов по области

function SelectSeekArea(SiteNumber: Integer; const aObject:  axMapObj;  

  aDistance: Double; aFilter,  aInside, aVisible, aAction: Integer): Integer;

Описание:

Установить параметры  поиска/выделения объектов по области, метрика которой задается в параметре  aObject. Ограничение устанавливается  только на режим поиска и не влияет на отображение/печать.

Метод принимает  следующие параметры:

SiteNumber     - номер карты в цепочке,  для которой устанавливается ограничение поиска. Если аSiteN = -1 - ограничение установится  для всего списка карт.

aObject  - объект карты (компонент  axMapObj) - область поиска. Координаты  области поиска задаются свойством axMapObj.Metric. aObject не обязан реально существовать  на карте (достаточно динамически создать экземпляр axMapObj, добавить в него метрику).  После вызова метода aObject можно удалить.  Объект карты  может находиться на любой карте из списка.

aDistance  - расстояние от границы  области поиска в метрах.

aAction    - предстоящая операция по  области : выделение/поиск (1/0). Если указано выделение, то будет заполнен  список выделенных объектов, которые можно выделить цветом при отображении карты  (axcMapView.SetViewSelected).

aFillter     - учитывать/не  учитывать(1/0) фильтр объектов, уже установленных в axMapSelect.

aInside    - границы поиска  объектов по области:

0 - внутри области по расстоянию от заданного  объекта;

1 - внутри области от заданного объекта, включая  пересечение границы,

    если задано расстояние, то с учетом  расстояния;

2 - целиком внутри области без касания или  пересечения границы;

4 - целиком снаружи области без касания или  пересечения границы.

aVisible   - с учетом/без учета(1/0)  видимости объектов на карте. Режим - с учетом видимости объектов карты имеет  смысл только в том случае, если для карты было выполнено ограничение перечня  отображаемых объектов карты (используя свойство axcMapView.ViewSelect).

При ошибке метод  возвращает ноль иначе количество карт, для которых ограничения на условия поиска  успешно установлены.

 
Процедура ВыделитьПоОбластиНажатие(Элемент)
//Пример группового выделения нескольких объектов по области, заданной другим объектом.
карта1 = ЭтаФорма.ЭлементыФормы.axMapView1;

карта1.Rendering = Ложь; // запретим переисовку, чтобы не моргало изображение карты на экране

карта1.ViewScale = 25000;

   название_карты = "Ногинский район";        

// найдем объект внутри которого ищем
   карта_объект = ЭтаФорма.ЭлементыФормы.axMapObj1;
Если карта_объект.SeekObject(название_карты, 38010) = 0 Тогда // кавртал редко застроенный
Сообщить("Объект с номером 38010 не найден");
   Возврат;
КонецЕсли;
карта_объект.Center();

   // код ниже для поиска, а мы будем выделять
//ПоискПоКарте = ЭтаФорма.ЭлементыФормы.axMapFind1;
//ПоискПоКарте.Active = Ложь;
//ПоискПоКарте.MapSelect.SiteNumber = 0;   // ищем в первой - основной карте
//ПоискПоКарте.MapSelect.UnselectSeekArea(-1);  // сбросим область если была
//ПоискПоКарте.FindPoint = Ложь;            
//ПоискПоКарте.Active = Истина;
//ПоискПоКарте.First() = Истина;

   // установим область по найденному ранее объекту
карта1.ViewSelect.ClearAll();
// установим фильтр для всех доступных карт,
// по контуру объекта карта_объект
// по расстоянию от границы = 0
// с учетом уже установленных фильтров в MаpSelect (можно задать только линейные, например) =1
// внутри области = 0
// без учета видимости = 0
// операция для выделения = 1
iret = карта1.ViewSelect.SelectSeekArea(-1, карта_объект.C_CONTAINER, 0, 1, 0, 0, 1);
Если iret = 0 Тогда
Сообщить("Область поиска не установлена");
    карта1.Rendering = Истина;
   Возврат;
КонецЕсли;

clRed  = 255;
   карта1.SetViewSelectedEx(Истина, clRed);

   // разрешим перерисовку
карта1.Rendering = Истина;

КонецПроцедуры
Страницы: 1 2 3 4 5 ... 23 След.
Читают тему (гостей: 4)



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

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