полигоны

0 голосов
спросил 16 Авг, 05 от Гость (210,080 баллов) в категории Программные продукты Esri
Здравствуйте, продвинутые друзья!
Подскажите, как в ArcView, в пределах одной темы из крупного полигона вычесть более мелкий, с образованием "дырки" . Например, в CS_коллекции скриптов есть обратное действие - из "дырок" создаётся новый полигональный шейп.

26 Ответы

0 голосов
ответил 16 Авг, 05 от Гость (210,080 баллов)

открыть тему на редактирование
выделить два полигона
Редактировать-Вычесть объекты

Верхний полигон вычитается из нижнего
получается два полигона
нижней с дыркой и верхний как и был

0 голосов
ответил 17 Авг, 05 от Гость (210,080 баллов)
Спасибо, Партизан, что отреагировал!
Дело в том, что мне нужно было оцифровать  батиметрию. Я в Easy Trace тупо отвекторизовал изобаты. Экспортировал в AV линейную и полиг. шейпы. Пытался в полиг. теме  по  коду  раскрасить -  у меня  большие  полигоны  перекрывают  маленькие и по твоему совету нифига не получается дырок. 
Правильнее было бы сделать красивую батиметрию с  пом модуля Grid Machine, но мне не найти кряк к нему.image
Посоветуй дураку  - как исправить ошибку.
0 голосов
ответил 17 Авг, 05 от BigSerg (4,080 баллов)
как вариант отсортируй их по площади
и пересоздай в новую тему - первый с самой большой площадью и т.д.
0 голосов
ответил 17 Авг, 05 от Гость (210,080 баллов)
Спасибо, попробую!
0 голосов
ответил 17 Авг, 05 от Гость (210,080 баллов)
Вопрос к Big Serg: понятно как отсортировать по площади, понятно как преобразовать в новый файл, но что сделать чтобы в этом новом файле полигоны выстроились по площади?
0 голосов
ответил 18 Авг, 05 от BigSerg (4,080 баллов)
Держи
Пользуйся на здоровье
Читай каментарии - они помогут разобраться

'Название поля с площадями полигонов
SFieldName = "Area"

'Вид и Исходная тема Активные
theView = av.GetActiveDoc
th = theView.GetActiveThemes.Get(0)
TheFTab = th.GetFtab
thName = th.GetName.asTokens(".").Get(0)
FieldList = TheFTab.GetFields.DeepClone
FieldList1 = TheFTab.GetFields.DeepClone
FieldList1.Remove(0)

'Новая тема
aFN = FileName.Make(av.GetProject.GetWorkDir.asString + "\"+thName+"_Sort.shp")
thClass = TheFTab.ReturnValue(TheFTab.GetFields.Get(0),0).GetClass
NewFtab = FTab.MakeNew(aFN,thClass)
NewFtab.AddFields(FieldList1)
if (NewFtab.isEditable.Not) then
NewFtab.SetEditable(True)
end

'определение таблицы исходной темы
theTable = av.FindDoc("Таблица темы"++th.GetName)
if (theTable <> nil) then
av.GetProject.RemoveDoc (theTable)
end
theTable = Table.Make(TheFTab)
theTable.SetName("Таблица темы"++th.GetName)
theTable.GetWin.Open

'Сортировка по полю Площади(начиная с большего)
'Если поставить aDescending = false - будет наоборот
aDescending = true
theTable.Sort(theTable.GetVtab.FindField(SFieldName),aDescen ding)
theTable.PromoteSelection


SkvCount = 0
for each i in 0..(TheFTab.GetNumRecords-1)
i = theTable.ConvertRowToRecord (i)
NewRec = NewFtab.AddRecord
theFieldNum = 0
for each j in FieldList
    TekObj = TheFTab.ReturnValue(j,i)
    NewFtab.SetValue(NewFtab.GetFields.G et(theFieldNum),NewRec,TekObj)
    theFieldNum = theFieldNum +1
end
end

theTable.GetWin.Close

if (NewFtab.isEditable) then
    NewFtab.SetEditable(False)
end
NewFtab.Refresh
thePTheme = FTheme.Make(NewFtab)
av.GetActiveDoc.addTheme(thePTheme)

return nil
0 голосов
ответил 18 Авг, 05 от Гость (210,080 баллов)
Спасибо, работает!
0 голосов
ответил 18 Авг, 05 от Гость (210,080 баллов)
Лена, объясни - как пользоваться этим скриптом?
0 голосов
ответил 19 Авг, 05 от BigSerg (4,080 баллов)
Непонятно - в чем у тебя возникли трудности!???
пользоваться скриптами умеешь?
0 голосов
ответил 19 Авг, 05 от Гость (210,080 баллов)

Возможно вопрос возник из-за двух опчаток в тексте скрипта. Чтобы скрипт сработал нужно убрать пробел в

...aDescen ding)...

и в ...G et(theFieldNum...

 

Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...