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

Объединение слоев

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1 2 След.
RSS
Объединение слоев
 
😫Добрый день, состояние капец очень плохое два исхода надо либо чтобы кто то написал программу либо подсказали как это сделать. И так вот смысл:
1. Создаётся n количество слоев
2. На каждом слое наносится какая то обстановка
3. Нажимаем кнопку и все n слоев объединяются в один, то есть все тактические знаки со всех слоев от 2 до n переносятся на 1 слой.

Примечание:
1. я знаю, что необходимо поменять свойство setsit у каждого элемента
2. И чтобы обраться к элементу и поменять слой надо обращаться через свойство key
3. Как это все реализовать я не знаю, не получается

Буду очень рад любой помощи! 😃
 
Если под "слоем" понимается отдельная карта, то:
1. С помощью компонента MapView открываете 1-ю (MapView.MapOpen) и n-ю (MapView.MapSites.Append)
2. В компоненте MapFind+MapObj перебираете все объекты со второй карты и каждому меняете принадлежность к карте (MapObj.SetSite(0)).

Пример работы с MapFind в примере \MapFind
 
Цитата
Andrey Gheleznyakov написал:
1. С помощью компонента MapView открываете 1-ю (MapView.MapOpen) и n-ю (MapView.MapSites.Append)
2. В компоненте MapFind+MapObj перебираете все объекты со второй карты и каждому меняете принадлежность к карте (MapObj.SetSite(0))
1. Я открыл пример MapFind см.Рис1.
2 Я выделил жирным, что я дописал
   - delete работает прекрасно и без commit даже
   - setsit(1)  то у меня получается что копируется по одному только обьекту а группу я не могу почему?
//==========================================================­====================
// Посчитать выбранные объеты                                      // 13/03/2010
//==========================================================­====================
procedure TfrmFind.CountStats(aMapFind : TMapFind);
var
 iPointcount,
 iVectCount,
 iLineCount,
 iTextCount,
 iSqrCount    : integer;
begin
 iPointcount := 0;
 iVectCount  := 0;
 iLineCount  := 0;
 iTextCount  := 0;
 iSqrCount   := 0;

 // статистика по типам объектов
 aMapFind.First;
 while not aMapFind.Eof do
 begin
   if aMapFind.MapObj.Local = OL_MARK
     then inc(iPointcount);

   if aMapFind.MapObj.Local = OL_LINE
     then inc(iLinecount);

   if aMapFind.MapObj.Local = OL_SQUARE
     then inc(iSqrcount);

   if aMapFind.MapObj.Local = OL_TEXT
     then inc(iTextcount);

   if aMapFind.MapObj.Local = OL_VECTOR
     then
     inc(iVectcount);

   //aMapFind.MapObj.Delete;
   aMapFind.MapObj.SetSite(1);
   aMapFind.MapObj.Commit;
   aMapFind.Next;

 end;

 showmessage('Выбранная область содержит: ' + #10#13 +
             IntToStr(iLinecount)  + ' линейных объектов'  + #10#13 +
             IntToStr(iSqrcount)   + ' площадных объектов' + #10#13 +
             IntToStr(iVectcount)  + ' векторных объектов' + #10#13 +
             IntToStr(iPointcount) + ' точечных объектов'  + #10#13 +
             IntToStr(iTextcount)  + ' подписей');
end;
024.png (17.81 КБ)
Изменено: Паук - 25.02.2019 22:59:13
 
А зачем группу?
Копируется по одному объекту, и хорошо.
Задача решается?
 
Цитата
Сергей Викторович написал:
А зачем группу?
Копируется по одному объекту, и хорошо.
Задача решается?
Представьте обстановка находиться на 10 и более слоях на каждом слое по 100 и более объектов. По одному будет очень долго.  
 
В вашем варианте за скорость не беспокойтесь. ГИС-ядро отработает быстро.

Для MapFindВключить/выключить карту обстановки.

property MapSites[Number: integer]: boolean;

Описание: Используйте данное свойство для определения состава контекстов  поиска/отображения карт обстановки.

Значение true  позволяет устанавливать условия в контексте поиска/отображения выбранной карты  обстановки, значение false подразумевает  исключение карты обстановки из совокупного контекста поиска/отображения, в этом  случае условия на поиск/отображение на данную карту не накладываются.

Параметр Number задает  порядковый номер карты обстановки. При использовании свойства на запись в  качестве значения Number допускается  использовать –1. В этом случае значение свойства будет присвоено ко всем картам  сразу. Нумерация карт обстановки начинается с 1, значение 0  определяет контекст поиска/отображения для основной карты.

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

 
Цитата
Andrey Gheleznyakov написал:
В вашем варианте за скорость не беспокойтесь. ГИС-ядро отработает быстро.

Для MapFindВключить/выключить карту обстановки.    property MapSites[Number: integer]: boolean;     Описание: Используйте данное свойство для определения состава контекстов  поиска/отображения карт обстановки. Значение true  позволяет устанавливать условия в контексте поиска/отображения выбранной карты  обстановки, значение false подразумевает  исключение карты обстановки из совокупного контекста поиска/отображения, в этом  случае условия на поиск/отображение на данную карту не накладываются.
Параметр Number задает  порядковый номер карты обстановки. При использовании свойства на запись в  качестве значения Number допускается  использовать –1. В этом случае значение свойства будет присвоено ко всем картам  сразу. Нумерация карт обстановки начинается с 1, значение 0  определяет контекст поиска/отображения для основной карты.  Далее надо через Next перебрать все объекты и заменить им карту.    
В моем коде который я выше прислал там перебор объектов заканчивается на первом объекте когда использую setsit, когда использую вместо setsit свойство delete перебор объектов идёт хорошо. То что вы мне сказали я это же самое читаю в руководстве по программированию gtk. Мой вопрос: "как осуществить перебор всех объектов в моем коде?" Будет очень хорошо если покажите на примере ... Так как теорию я всю уже 100 раз прочитал и понимаю что надо сделать, но как не знаю. Поэтому прошу помощи  
 
Сегодня я работал над групповым переносом обьектов ничего не вышло,  но пока не ухожу от этого, но у меня в итоге получилось
1. Кликом лкм выделяю обьект
2. Сделал кнопку на панеле клик на нее и переношу объект на нужный мне слой

Но все-же понять не могу почему групповое удаление работает хоршохоршо , а групповое перемещение объектов не работает.  
 
Переходы внутри выборки объектов поиска (MapFind.Next, MapFind.Prior) выполняются от того текущего объекта на котором сейчас поиск установлен.
Этот объект как бы знает, какой в поиске у него предыдущий, а какой следующий. Поэтому, если взять этот текущий объект и перенести его на другую карту, такая связь теряется. Соответственно, переходы в MapFind после этого не работают.

Обработку объектов, попавших в MapFind лучше делать "снаружи" - используя дополнительный MapObj, который каждый раз при переходах по MapFind настраивать на текущий объект в нем. И уже этим дополнительным MapObj выполнять операции.

В цикле для каждого объекта из MapFind:
Код
MapObj2.ObjHandle := MapFind.MapObj.ObjHandle;
MapObj2.SetSite(SiteNumber);
MapObj2.Commit;
 
Цитата
Денис Вицко написал:
Переходы внутри выборки объектов поиска (MapFind.Next, MapFind.Prior) выполняются от того текущего объекта на котором сейчас поиск установлен.
Этот объект как бы знает, какой в поиске у него предыдущий, а какой следующий. Поэтому, если взять этот текущий объект и перенести его на другую карту, такая связь теряется. Соответственно, переходы в MapFind после этого не работают.

Обработку объектов, попавших в MapFind лучше делать "снаружи" - используя дополнительный MapObj, который каждый раз при переходах по MapFind настраивать на текущий объект в нем. И уже этим дополнительным MapObj выполнять операции.

В цикле для каждого объекта из MapFind:
Код
 MapObj2.ObjHandle := MapFind.MapObj.ObjHandle;
MapObj2.SetSite(SiteNumber);
MapObj2.Commit;
 
Спасибо больше! Все получилось все работает!  
Страницы: 1 2 След.
Читают тему (гостей: 1)



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

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