Страница 1 из 1
ArcGis, ArcView: Слияние полигонов с присвоением аттрибутов
Добавлено: 30 мар 2006, 12:34
Борис
Добрый день!
Подскажите, пожалуйста, как справиться с такой задачей:
Есть вектроная тема, состоящая из смежных полигонов. Каждому полигону соответствует определенное значение параметра. Как слить все полигоны в один, но так, чтобы в аттрибутивной таблице результрующего полигона значение параметра соответствовало максимальному значению из вошедших в него полигонов.
В более общем случае - тема состоит из "островов" - каждый из которых - это набор смежных полигонов. Принадлежность каждого полигона к определенному острову - прописана в отдельном поле аттрибутов.
Re: ArcGis, ArcView: Слияние полигонов с присвоением аттрибутов
Добавлено: 31 мар 2006, 15:11
geologic
Не совсем понятно:
1. Смежные это значит "сплошное покрытие"? ведь не могут же быть все полигоны смежными, (соседними) даже в пределах островов...
2. Вам нужно слить только соседние полигоны без учета их атрибутов, или агрегировать любые полигоны по какому-то атрибутивному признаку, например, по номеру острова?
Впрочем условие слияния это момент отдельный от вашего основного вопроса. В ГИС обычно есть операции которые при любых слияниях сохраняют номера-идентификаторы обоих полигонов, а уж по ним вы можете "выудить" параметры прежних полигонов из "старого" файла и провести с ними любые операции. Разумеется, это потребует дополнительных операций с таблицами.
Добавлено: 31 мар 2006, 15:28
Борис
Слить нужно определенное количество полигонов, имеющих одинаковй параметр; в частном случае - эти полигоны являются соседними (=остров поделен на ячейки, каждая ячейка при этом имеет аттрибут имени острова)
Как проводится такая операция в ArcView разобрался - тривиально, с помощью GeoProcessingWizard, далее Dissolve features, после чего ArcView предлагает выбрать какие НОВЫЕ поля в таблицу аттрибутов следует добавить, в частности, максимальное значение аттрибутов сливаемых полигонов, минимальное, среднее и т.п.
Не могу найти аналогичную процедуру (с добавлением новых "статистических" полей) в ArcGis 9. Подскажите, плз, где она сидит:)
И в дополнение к вопросу: где в ArcGis 9 скрывается процедура, аналогичная ArcView(шной) - Assign data by location (Spatial join)
спасибо-)
Добавлено: 31 мар 2006, 18:59
Максим Дубинин
И в дополнение к вопросу: где в ArcGis 9 скрывается процедура, аналогичная ArcView(шной) - Assign data by location (Spatial join)
Right-click на теме, Join, Join by spatial location
Не могу найти аналогичную процедуру (с добавлением новых "статистических" полей) в ArcGis 9. Подскажите, плз, где она сидит
Вроде тоже самое в ней. Dissolve, statistical fields, название поля и тип статистики по крайней мере Arcgis 9.1/Arcinfo, может в Arcgis/Arcview нет этого
Добавлено: 01 апр 2006, 18:31
Борис
Спасибо

Re: ArcGis, ArcView: Слияние полигонов с присвоением аттрибутов
Добавлено: 16 дек 2009, 16:14
Valle
Покажите хоть часть кода.
Вообще не могу представить как это делается.
Dissolve написано на Питоне, в принципе смысл понятен
Код: Выделить всё
# DissolveByUnique.py
# Description: Divide a line geodatabase feature class into several based on the unique values in a
# field. Output will be dissolved to remove pseudonodes (if any).
# Author: ESRI
# Date: 1/1/04
import arcgisscripting, sys, string, os
gp = arcgisscripting.create()
try:
# Set the workspace (to avoid having to type in the full path to the data every time)
gp.workspace = "C:/data/Transportation.mdb"
# Set the input feature class
fc = "transport"
# Set the field to create a list of unique values
fieldname = "ROAD_CLASS"
# Open a Search Cursor to identify all unique values
rows = gp.SearchCursor(fc)
row = rows.Next()
# Set a list variable to hold all unique values
L = []
# Using a while loop, cursor through all records and append unique values to the list variable
while row:
value = row.GetValue(fieldname)
if value not in L:
L.append(value)
row = rows.Next()
# Sort the list variable
L.sort()
# If a value in the list variable is blank, remove it from the list variable
if ' ' in L:
L.remove(' ')
# Use MakeFeatureLayer to create a selectable layer
gp.MakeFeatureLayer(fc, "dissolveLYR")
# Loop through the list variable
x = 0
for item in L:
# Concatenate the query
query = "[" + fieldname + "]" + " = '" + L[x] + "'"
# Create a selection on the layer with the current unique value (i.e., L[x])
gp.SelectLayerByAttribute("dissolveLYR", "NEW_SELECTION", query)
# Use Dissolve to create new feature class based on layer selection, output feature class
# will share name of unique value
gp.Dissolve_management("dissolveLYR", L[x], fieldname)
x = x + 1
except:
# If an error occurred while running a tool print the messages
print gp.getmessages()
Подскажите пожалуйста, как написать слияние смежных полигонов, но на VBA?
Перелопатил книгу по arcobjects даже намека нет, на решение этой задачи.
Re: ArcGis, ArcView: Слияние полигонов с присвоением аттрибутов
Добавлено: 25 дек 2009, 09:36
Valle
не подскажете в каком классе функция append находится?