Объединение слоёв

0 голосов
спросил 12 Апр, 04 от Гость (210,080 баллов) в категории Программные продукты Esri

Обращаюсь к опытным коллегам, т.к. сам - новичок в ArcView.

Подскажите, как объединить два слоя? Дело в том, что пространственные данные объединяются без проблем через Copy/Paste, а атрибутивные данные не вставляются при выполнении Paste. Заранее очень признателен за ответ

 

7 Ответы

0 голосов
ответил 12 Апр, 04 от Vius (7,580 баллов)
Вид>Мастер пространственных оперций>Merge Themes (View>Geoprocessing Wizard>Merge Themes)
0 голосов
ответил 12 Апр, 04 от Гость (210,080 баллов)
Я не шибко опытный, но помнится слои с присоединением атрибутов объединял в AV с помощью Мастера пространственных операций (в английском интерфейсе помоему, geoprocessing wizard, не помню точно)
Подключить его можно, вызвав диалог подключения доступных модулей, он вроде входит в стандартную поставку AV. После подключения появляется в пункте меню Вид, вроде. Там всё несложно, если что и в справке можно почитать.
Вот выдержка из русской справки:
"Мастер пространственных операций предоставляет шесть опций (процедур) пространственных операций, которые Вы можете использовать для создания или изменения объектных тем.
Слить объекты   Эта операция выполняет группирование объектов в одной теме на основании значения выбранного вами атрибута. Технически это аналогично работе с атрибутивной таблицей для темы при выборе опции Статистики для атрибута, по которому будет осуществляться слияние объектов.

Слить темы   Эта операция создает одну тему, содержащую объекты двух или более тем. Новая тема будет содержать поля одной из входных тем. Если каждая из других входных тем имеет точно такие же поля, все ячейки в атрибутивной таблице новой темы будут заполнены. Если какая-либо из других входных тем имеет дополнительные поля, эти данные включены не будут. Если в любой из других входных тем такие поля отсутствуют, для объектов этой темы будут добавлены значения отсутствия данных (no data).

Вырезание   Эта операция создает новый шейп-файл посредством наложения объектов двух тем. Одна из этих тем должна быть полигональной (называемой “темой наложения”), она будет использоваться для определения области отсечения. Эта операция использует ее в качестве формы для вырезания. В новом шейп-файле сохраняются только те объекты из другой темы (называемой “входной темой”), которые попадают в вырезаемую область. Объектами Входной темы могут быть полигоны, линии или точки. Объекты в новом шейп-файле будут того же типа, что и объекты Входной темы. Объектная атрибутивная таблица для нового шейп-файла содержит поля, идентичные имеющимся в атрибутивной таблице входной темы.

Пересечение   Эта операция вычисляет геометрическое пересечение двух тем и добавляет его в ваш Вид в качестве новой темы. Темой наложения должна быть полигональная тема. Ее объекты осуществят разбивку входной темы. Любые объекты во входной теме, которые не перекрываются объектами темы наложения, игнорируются. В результирующую тему включаются только те области, которые совпадают во входной теме и теме наложения. Объекты входной темы могут быть полигонами или линиями. Объекты результирующего шейп-файла будут одного типа с объектами входной темы. Атрибутивная таблица результирующего шейп-файла включает атрибуты входной темы и темы наложения.

Объединение   Операция Объединения создает новую тему посредством наложения двух полигональных тем. Результирующая тема содержит объединенные полигоны и атрибуты обеих тем. Полигоны входной темы разбиваются по их пересечениям с полигонами темы наложения. Атрибутивная таблица объектов для результирующей темы содержит атрибуты из таблиц входной темы и темы наложения.
Присвоение данных по местоположению   Операция Присвоения данных по местоположению осуществит пространственное соединение между двумя выбранными темами. Пространственное соединение аналогично атрибутивному соединению, однако оно базируется на пространственном отношении между объектами двух тем. Для каждого объекта, представленного в целевой таблице, ArcView определяет, существуют ли какой-либо Вид пространственных отношений по отношению к какому-либо объекту, представленному в исходной таблице, и если это так, тогда запись для этого объекта из исходной таблицы соединяется с целевой таблицей
Когда пространственное соединение основывается на отношении “ближайший” (то есть, ни одна из двух участвующих тем не содержит полигонов, а одна из них содержит точки), ArcView добавляет в целевую таблицу поле Distance (Расстояние). Это поле, которое ArcView вычисляет автоматически, содержит для каждого объекта, представленного в целевой таблице, значение расстояния до ближайшего объекта, представленного в исходной таблице. Расстояние вычисляется в единицах измерения данного Вида.

Когда пространственное соединение основывается на отношении “является частью” (то есть, обе участвующие темы содержат линейные объекты), линейные объекты, представленные в целевой таблице, должны быть подмножеством линейных объектов, представленных в исходной таблице, чтобы удовлетворять условиям пространственного соединения. Другими словами, линии из одной темы являются частью линий в другой теме. Например, если у вас имелась река Ока в одной теме и другие реки бассейна Волги в другой теме, тогда все объекты первой темы рассматриваются как “часть” объектов второй темы. Это происходит потому, что Ока является притоком Волги, и объекты, представляющие Оку, присутствуют во второй теме"
0 голосов
ответил 12 Апр, 04 от Гость (210,080 баллов)
Vius
одновременно:)
0 голосов
ответил 14 Апр, 04 от Гость (210,080 баллов)
Огромное спасибо за быстрые и полные ответы! Как всё оказалось просто!
0 голосов
ответил 23 Апр, 04 от Pentium-IV (1,140 баллов)

Код для объединения 2D тем

theview       = av.getactivedoc
theGraphics   = theview.GetGraphics
theProjection = theView.GetProjection

if ( (theView.GetActiveThemes.Count=0) or (theView.GetActiveThemes.Get(0).Is(ITheme)) ) then
 msgbox.error("An Active Feature Theme is Required","Exiting")
 return(nil)
end

themelist=theView.getthemes
if (TheView.getactiveThemes.count=0) then exit end
s=TheView.getactiveThemes.count

SrcTheme = theView.GetActiveThemes.Get(0)


'+++++++++++++++++++++++++++++++++++++++++++++++++++
'Ñîçäàåì íîâóþ Ftab
'+++++++++++++++++++++++++++++++++++++++++++++++++++

   outFName = av.GetProject.MakeFileName(SrcTheme.GetName, "shp")
'   outFName=("d:\gis_prj\"+(SRCTheme.GetName)).AsFileName
   outFName = FileDialog.Put(outFName, "*.shp", "Output Clipped Shapefile")
   if (outFName = Nil) then
     exit
   end
 
   shapeType = SRCTheme.GetFTab.FindField("Shape").GetType

   if (shapeType = #FIELD_SHAPELINE) then
     outClass = POLYLINE
   elseif (shapeType = #FIELD_SHAPEMULTIPOINT) then
     outClass = MULTIPOINT
   elseif (shapeType = #FIELD_SHAPEPOINT) then
     outClass = POINT
   elseif (shapeType = #FIELD_SHAPEPOLY) then
     outClass = POLYGON
   else
     MsgBox.Error("Invalid shape field type.", "Clip Theme")
     exit
   end
  
   OutputFTab = FTab.MakeNew( outFName, outClass )'Ñîçäàíèå íîâîé òàáëèöû
'+++++++++++++++++++++++++++++++++++++++++++++++++++++
'Äîáàâëÿåì â íîâóþ FTab îñòàëüíûå ïîëÿ (åñëè åñòü) èç òàáëèöû òåìû
'+++++++++++++++++++++++++++++++++++++++++++++++++++++

   SRCfields = List.Make

   for each f in SRCTheme.GetFTab.GetFields    'ïåðåíîñ ïîëåé èç ñòàðîé òàáëèöû â íîâóþ
     if (f.GetName = "Shape") then
       continue
     else
       fCopy = f.Clone
       SRCfields.Add(fCopy)
     end
   end

   if (SRCFields.Count > 0) then              'Äîáàâëåíèå ïîëåé, åñëè òàêèå åñòü   
    OutputFTab.AddFields( SRCFields )
   end
'++++++++++++++++++++++++++++
'Äîáàâëÿåì  çàïèñè
'++++++++++++++++++++++++++++

for each r in 0..(s-1)
theFtab = theView.GetActiveThemes.Get(r).GetFTab

for each c in 0..(theFTab.GetNumRecords-1)
 aValue=theFTab.ReturnValue(theFTab.FindField("Shape"),c)
 theoutrec=outputftab.addrecord
 outputFtab.SetValue(theFTab.FindField("Shape"),theoutrec,aValue)
   for each afield in SRCfields      'Äîáàâëåíèå çíà÷åíèé âñåõ ïîëåé, êðîìå shape
     oldfield=Theftab.findfield(afield.getname)
     oldvalue=TheFtab.returnvalue(oldfield,c)
     outputftab.setValue(afield, theoutrec, oldvalue)
   end

end
end

Outputftab.seteditable(false)

if (MsgBox.YesNo("Add shapefile as theme to a view?",
  "Clip Theme", true).Not) then
  exit
end

viewList = {}
for each d in av.GetProject.GetDocs
  if (d.Is(View)) then
    viewList.Add( d )
  end
end

viewList.Add("<New View>")
addToView = MsgBox.ListAsString( viewList,"Add Theme to:", "Clip Theme" )

if (addToView <> nil) then

  if (addToView = "<New View>") then
    addToView = View.Make
    addToView.GetWin.Open
  end
 
  mergeTheme = FTheme.Make( OutputFTab )
  addToView.AddTheme( mergeTheme )

  ' Bring the View to the front...
  addToView.GetWin.Activate
end
av.clearstatus

Для 3D тем:

theview       = av.getactivedoc
theGraphics   = theview.GetGraphics
theProjection = theView.GetProjection

if ( (theView.GetActiveThemes.Count=0) or (theView.GetActiveThemes.Get(0).Is(ITheme)) ) then
 msgbox.error("An Active Feature Theme is Required","Exiting")
 return(nil)
end

themelist=theView.getthemes
if (TheView.getactiveThemes.count=0) then exit end
s=TheView.getactiveThemes.count

SrcTheme = theView.GetActiveThemes.Get(0)


'+++++++++++++++++++++++++++++++++++++++++++++++++++
'Ñîçäàåì íîâóþ Ftab
'+++++++++++++++++++++++++++++++++++++++++++++++++++

   outFName = av.GetProject.MakeFileName(SrcTheme.GetName, "shp")
'   outFName=("d:\gis_prj\"+(SRCTheme.GetName)).AsFileName
   outFName = FileDialog.Put(outFName, "*.shp", "Output Clipped Shapefile")
   if (outFName = Nil) then
     exit
   end
 
   shapeType = SRCTheme.GetFTab.FindField("Shape").GetType

   if (shapeType = #FIELD_SHAPELINE) then
     outClass = POLYLINEZ
   elseif (shapeType = #FIELD_SHAPEMULTIPOINT) then
     outClass = MULTIPOINTZ
   elseif (shapeType = #FIELD_SHAPEPOINT) then
     outClass = POINTZ
   elseif (shapeType = #FIELD_SHAPEPOLY) then
     outClass = MULTIPATCH
    ' elseif (shapeType = #FIELD_MULTIPATCH) then
    ' outClass = MULTIPATCH

   else
     MsgBox.Error("Invalid shape field type.", "Clip Theme")
     exit
   end
  
   OutputFTab = FTab.MakeNew( outFName, outClass )'Ñîçäàíèå íîâîé òàáëèöû
'+++++++++++++++++++++++++++++++++++++++++++++++++++++
'Äîáàâëÿåì â íîâóþ FTab îñòàëüíûå ïîëÿ (åñëè åñòü) èç òàáëèöû òåìû
'+++++++++++++++++++++++++++++++++++++++++++++++++++++

   SRCfields = List.Make

   for each f in SRCTheme.GetFTab.GetFields    'ïå&#24

0 голосов
ответил 28 Ноя, 04 от Гость (210,080 баллов)
К сожаления вышепредложенная программа у меня не заработала... И ни один из вариантов Geoprocessin'га меня не устраивал. Но я нашел модуль http://arcscripts.esri.com/Data/AS12914.zip
Называется AV Theme Merge.
Он меня и спас - Классная вещь!!!!image
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...