| Предыдущая тема :: Следующая тема   | 
	
	
	
		| Автор | 
		Сообщение | 
	
	
		gstof
 
 
  Зарегистрирован: 26.01.2007 Сообщения: 70 Откуда: Vladivostok-Kurgan
  | 
		
			
				 Добавлено: Сб 25 Окт 2008 16:02    Заголовок сообщения: Добраться до слоев | 
				     | 
			 
			
				
  | 
			 
			
				Необходимо добраться до слоев.
 
До карт получается, а дальше нет. Как связаны векторная карта с картой?
 
 	  | Код: | 	 		  
 
  IApp: IIngeoApplication;
 
  IMaps: IIngeoMaps;
 
  IMap:IIngeoMap;
 
  ITables:IIngeoDB;
 
  VMap:IIngeoMapView;
 
  VMaps:IIngeoMapViews;
 
  Project:IIngeoProjectView;
 
  Style:IIngeoStyle;
 
  Layers:IIngeoLayers;
 
  Layer:IIngeoLayer;
 
  Map:IIngeoVectorMap;
 
  Query:IingeoMapObjectsQuery;
 
  Areas:IIngeoAreas;
 
  Area:IingeoArea;
 
 
IApp:=GetActiveIngeoApp;
 
MapObjects:=IApp.ActiveDb.MapObjects;
 
ITables:=IApp.ActiveDb;
 
Areas:=ITables.Areas;
 
Area:=Areas.Item[0];
 
Imaps:=Area.Maps;
 
//Layers:=Imaps.  //Iapp.ActiveProjectView.ActiveLayerView;
 
for i:=0 to IMaps.Count-1 do
 
 begin
 
 IMap:=IMaps.Item[i];
 
// Map:=Imap.Area.Maps.;
 
 layer:=Layers.Item[i];
 
 Query:=Mapobjects.QueryByLayers(Layer.ID);
 
 while Query.EOF=False do
 
  begin
 
  ListBox1.Items.Add(Query.ObjectID);
 
  Query.MoveNext;
 
  end;
 
// ListBox1.Items.Add(IMap.Name+' '+IMap.ID);
 
 Application.ProcessMessages; | 	  
 
 
Ошибка возникает после в пенрвом циклне на второй строчке.
 
Может быть кто-то подскажет? | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Расуль
 
  
  Зарегистрирован: 05.09.2008 Сообщения: 5 Откуда: Уфа ЦСИ. Интегро
  | 
		
			
				 Добавлено: Пн 27 Окт 2008 12:49    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				Вот пример иллюстрирующий перебор всех слоев в Активной базе. 
 
 
 	  | Код: | 	 		  
 
procedure TForm1.Button1Click(Sender: TObject);
 
var
 
  aStringList: TStringList;
 
begin
 
  aStringList := TStringList.Create;
 
  try
 
    GetLayers(aStringList);
 
    ListBox1.Items.Assign(aStringList);
 
  finally
 
    aStringList.Free;
 
  end;
 
end;
 
 
procedure TForm1.GetLayers(aStringList: TStringList);
 
var
 
  anAreas: IIngeoAreas;
 
  anArea: IIngeoArea;
 
  aMaps: IIngeoMaps;
 
  aVectorMap: IIngeoVectorMap;
 
  aLayers: IIngeoLayers;
 
  aLayer: IIngeoLayer;
 
  i,j,k,l: Integer;
 
begin
 
  FApplication := GetActiveIngeoApplication;
 
  anAreas := FApplication.ActiveDb.Areas;
 
  for i := 0 to anAreas.Count - 1 do begin
 
    anArea := anAreas[i];
 
    for j := 0 to anArea.Maps.Count - 1 do begin
 
       if (anArea.Maps[j].MapType = inmtVector) then begin
 
          aVectorMap := anArea.Maps[j] as IIngeoVectorMap;
 
        aLayers := aVectorMap.Layers;
 
        for l := 0 to aLayers.Count - 1 do begin
 
          aLayer := aLayers[l];
 
          aStringList.Add(aVectorMap.Name +'\'+ aLayer.Name+'"'+ aLayer.ID+'"' );
 
        end;
 
      end;
 
    end;
 
  end;
 
end;
 
 
 
 | 	 
  _________________ Расуль | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Расуль
 
  
  Зарегистрирован: 05.09.2008 Сообщения: 5 Откуда: Уфа ЦСИ. Интегро
  | 
		
			
				 Добавлено: Пн 27 Окт 2008 12:56    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				Забыл сказать  . В ИнГео Карты делятся на два типа: Растровые и 
 
Векторные. Из примера видно, что сначала я узнаю тип карты. В данном случае нам нужна векторная, когда мы уже знаем что там находиться векторная карта, мы приравниваем ее переменной типа IIngeoVectorMap, не забывая оператор as. У переменной типа IIngeoVectorMap есть слои, и можно их получить, что и показывает данный пример   _________________ Расуль | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		gstof
 
 
  Зарегистрирован: 26.01.2007 Сообщения: 70 Откуда: Vladivostok-Kurgan
  | 
		
			
				 Добавлено: Пн 27 Окт 2008 20:46    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				Спасибо большое.
 
Все получилось | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		 |