| Предыдущая тема :: Следующая тема   | 
	
	
	
		| Автор | 
		Сообщение | 
	
	
		Петр Кузнецов
 
 
  Зарегистрирован: 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; | 	 
  _________________ С уважением, Руслан Гадеев
 
Видео уроки ИнГео
 
Документация ИнГео
 
Обновления ИнГео
 
Интегропедия | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Петр Кузнецов
 
 
  Зарегистрирован: 21.07.2008 Сообщения: 9
 
  | 
		
			
				 Добавлено: Ср 23 Июл 2008 12:35    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				Спасибо! все получилось!   | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Петр Кузнецов
 
 
  Зарегистрирован: 21.07.2008 Сообщения: 9
 
  | 
		
			
				 Добавлено: Ср 23 Июл 2008 13:05    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				А есть ли функция для создания копии слоя в пределах одной карты или необходимо копировать все объекты и семантику отдельно?
 
 
И где взять библиотеки API ИнГЕО о которых говорится здесь
 
http://integro.ru/projects/gis/addon_d3_2.htm ? | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		RuslanG
 
  
  Зарегистрирован: 10.07.2005 Сообщения: 171 Откуда: ИНТЕГРО
  | 
		 | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Петр Кузнецов
 
 
  Зарегистрирован: 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 Откуда: ИНТЕГРО
  | 
		 | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Петр Кузнецов
 
 
  Зарегистрирован: 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 честно равно числу слоев | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		 |