Список форумов www.integro.ru www.integro.ru
ЦСИ ИНТЕГРО
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Как правильно создать слой?

 
Начать новую тему   Ответить на тему    Список форумов www.integro.ru -> Вопросы разработчиков
Предыдущая тема :: Следующая тема  
Автор Сообщение
Петр Кузнецов



Зарегистрирован: 21.07.2008
Сообщения: 9

СообщениеДобавлено: Пн 21 Июл 2008 17:01    Заголовок сообщения: Как правильно создать слой? Ответить с цитатой

Добрый день!

Прошу дать старт! Необходимо создать слой в активной карте, как правильно это сделать? Код ошибок не выдает, слой не появляется.

Код:

var
  aVectorMap : IIngeoVectorMap;
  aLayers : IIngeoLayers;
  aNewLayer : IIngeoLayer;
  aActiveMapView: IIngeoMapView;
  aMapObjects: IIngeoMapObjects;
begin
  aActiveMapView:= FIngeo.ActiveProjectView.ActiveMapView;
  if aActiveMapView.Map.MapType = inmtVector then
  begin
    aVectorMap:= aActiveMapView.Map as IIngeoVectorMap;
    aLayers:= aVectorMap.Layers;
    aNewLayer:= aLayers.Add;
    aNewLayer.Name:= 'TEST';
  end;


UpdateChanges надо куда-то вставить?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
RuslanG



Зарегистрирован: 10.07.2005
Сообщения: 171
Откуда: ИНТЕГРО

СообщениеДобавлено: Вт 22 Июл 2008 11:06    Заголовок сообщения: Ответить с цитатой

У слоя есть метод "Update", который вносит изменения свойств слоя в базу данных. Добавьте вызов этого метода:
Код:
  aNewLayer.Name:= 'TEST';
  aNewLayer.Update;
end;

_________________
С уважением, Руслан Гадеев
Видео уроки ИнГео
Документация ИнГео
Обновления ИнГео
Интегропедия
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Петр Кузнецов



Зарегистрирован: 21.07.2008
Сообщения: 9

СообщениеДобавлено: Ср 23 Июл 2008 12:35    Заголовок сообщения: Ответить с цитатой

Спасибо! все получилось! Very Happy
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Петр Кузнецов



Зарегистрирован: 21.07.2008
Сообщения: 9

СообщениеДобавлено: Ср 23 Июл 2008 13:05    Заголовок сообщения: Ответить с цитатой

А есть ли функция для создания копии слоя в пределах одной карты или необходимо копировать все объекты и семантику отдельно?

И где взять библиотеки API ИнГЕО о которых говорится здесь
http://integro.ru/projects/gis/addon_d3_2.htm ?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
RuslanG



Зарегистрирован: 10.07.2005
Сообщения: 171
Откуда: ИНТЕГРО

СообщениеДобавлено: Ср 23 Июл 2008 14:31    Заголовок сообщения: Ответить с цитатой

Функции нет. Необходимо копировать все объекты и семантику отдельно.
Пример копирования объекта из слоя в слой в следующей теме:
http://www.integro.ru/forum/viewtopic.php?t=407

Модули, адаптированные для Delphi 2006, а также библиотека AddonLib, необходимая для компиляции модулей:
http://www.integro.ru/dl/ingeo/examples/BDS2006/index.htm

_________________
С уважением, Руслан Гадеев
Видео уроки ИнГео
Документация ИнГео
Обновления ИнГео
Интегропедия
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Петр Кузнецов



Зарегистрирован: 21.07.2008
Сообщения: 9

СообщениеДобавлено: Ср 23 Июл 2008 16:05    Заголовок сообщения: Ответить с цитатой

Благодарю!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Петр Кузнецов



Зарегистрирован: 21.07.2008
Сообщения: 9

СообщениеДобавлено: Пт 01 Авг 2008 16:00    Заголовок сообщения: Ответить с цитатой

В продолжение темы:
Как вы могли понять, мне необходимо сделать копию слоя
слой нашел, создал, копирую стили так:
Код:

for j:= 0 to aLayer.Styles.Count - 1 do
begin
   aStl:= aNewLayer.Styles.Add;
   aStl.Name:= aLayer.Styles[j].Name;
   aStl.Update;
end;
aNewLayer.Update;


В строке

Код:
aStl:= aNewLayer.Styles.Add;


эксепшн, указатель aNewLayer.Styles рвен nil
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
RuslanG



Зарегистрирован: 10.07.2005
Сообщения: 171
Откуда: ИНТЕГРО

СообщениеДобавлено: Вт 05 Авг 2008 16:54    Заголовок сообщения: Ответить с цитатой

Попробуйте вызвать метод aNewLayer.Update до выполнения цикла.
_________________
С уважением, Руслан Гадеев
Видео уроки ИнГео
Документация ИнГео
Обновления ИнГео
Интегропедия
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Петр Кузнецов



Зарегистрирован: 21.07.2008
Сообщения: 9

СообщениеДобавлено: Вт 05 Авг 2008 17:03    Заголовок сообщения: Ответить с цитатой

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

Код:

aNewLayer:= aLayers.Add;
aNewLayer.Name:= 'Новый слой';
aNewLayer.Update;
// Скопировать стили
for j:= 0 to aLayer.Styles.Count - 1 do
begin
  aStl:= aNewLayer.Styles.Add;
  aStl.Name:= aLayer.Styles[j].Name;
  aStl.Flags:= aLayer.Styles[j].Flags;
  aStl.Update;
  // В Данном стиле скопировать методы отображения
  for k:= 0 to aLayer.Styles[j].Painters.Count - 1 do
  begin
    ...
  end;
  // снова обновить стиль (для актуализации методов)
  aStl.Update;
end;
// последний вызов метода Update для создаваемого слоя
aNewLayer.Update;


Не идеально, но работает...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
kirigal



Зарегистрирован: 01.12.2009
Сообщения: 5

СообщениеДобавлено: Пн 15 Фев 2010 19:25    Заголовок сообщения: Ответить с цитатой

(допустим aLayers.Count = 2)
aNewLayer:= aLayers.Add;
aNewLayer.Name:= 'Новый слой';
aNewLayer.Update;
Почему после этого aLayers.Count равно 2ум?
Также aLayers.Count не меняеться после удалния слоя "ручками" из проводника базы данных.
При добавлении слоя ручками в проводнике базы данных aLayers.Count честно равно числу слоев
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов www.integro.ru -> Вопросы разработчиков Часовой пояс: GMT + 5
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете добавлять приложения в этом форуме
Вы можете скачивать файлы в этом форуме


© phpBB Group
Русская поддержка phpBB