Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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 Заголовок сообщения: |
|
|
Спасибо большое.
Все получилось |
|
Вернуться к началу |
|
 |
|