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

Добраться до слоев

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


Ошибка возникает после в пенрвом циклне на второй строчке.
Может быть кто-то подскажет?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Расуль



Зарегистрирован: 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    Заголовок сообщения: Ответить с цитатой

Забыл сказать Smile. В ИнГео Карты делятся на два типа: Растровые и
Векторные. Из примера видно, что сначала я узнаю тип карты. В данном случае нам нужна векторная, когда мы уже знаем что там находиться векторная карта, мы приравниваем ее переменной типа IIngeoVectorMap, не забывая оператор as. У переменной типа IIngeoVectorMap есть слои, и можно их получить, что и показывает данный пример Smile

_________________
Расуль
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
gstof



Зарегистрирован: 26.01.2007
Сообщения: 70
Откуда: Vladivostok-Kurgan

СообщениеДобавлено: Пн 27 Окт 2008 20:46    Заголовок сообщения: Ответить с цитатой

Спасибо большое.
Все получилось
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов www.integro.ru -> Вопросы разработчиков Часовой пояс: GMT + 5
Страница 1 из 1

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


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