Удаление дубликатов линий на автомате

Arcview GIS 3.x, Arcinfo Workstation, Mapobjects
Ответить
Аватара пользователя
Игорь
Интересующийся
Сообщения: 33
Зарегистрирован: 19 ноя 2008, 12:25
Репутация: 6

Удаление дубликатов линий на автомате

Сообщение Игорь » 29 ноя 2008, 02:26

Специалисты, помогите пожалуйста.
Все таки хочется на автомате удалять дубликаты линий.
Кому не лень поломать голову - шейп в прицепе.
Вложения
Connect.zip
(3.95 КБ) 417 скачиваний

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 8906
Зарегистрирован: 06 окт 2003, 20:20
Статьи: 231
Проекты: 12/6
Репутация: 644
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Удаление дубликатов линий на автомате

Сообщение Максим Дубинин » 29 ноя 2008, 04:59

Лови, выделяет объекты - охваты которых одинаковы, можно еще добавить дополнительную проверку на длину, но вероятность, что охваты равны, но это не одинаковые объекты ничтожно мала.

Код: Выделить всё

aview = av.getactivedoc
atheme = aview.getactivethemes.get(0)
aftab = atheme.getftab
f_shape = aftab.findfield("shape")
'f_dup = a

abitmap = aftab.getselection

for each rec in aftab
  ashape = aftab.returnvalue(f_shape,rec)
  for each rec2 in aftab
    if (rec <> rec2) then
      ashape2 = aftab.returnvalue(f_shape,rec2)
      if (ashape.returnextent = ashape2.returnextent) then
        abitmap.set(rec)
        abitmap.set(rec2)
      end
    end
  end
end

aftab.setselection(abitmap)
aftab.UpdateSelection
пристегивайтесь, турбулентность прямо по курсу

Аватара пользователя
Игорь
Интересующийся
Сообщения: 33
Зарегистрирован: 19 ноя 2008, 12:25
Репутация: 6

Re: Удаление дубликатов линий на автомате

Сообщение Игорь » 29 ноя 2008, 14:57

Sim, спасибо большое, как минимум на 50% задача решена. Еще бы понять как на автомате выделенные объекты разделить на оригинал и дубликаты, чтобы удалить все что не нужно, оставив только не дублирующиеся объекты.

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 8906
Зарегистрирован: 06 окт 2003, 20:20
Статьи: 231
Проекты: 12/6
Репутация: 644
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Удаление дубликатов линий на автомате

Сообщение Максим Дубинин » 30 ноя 2008, 05:25

Сделал так, из дубля - первый из них отмечается в новом поле dup, второй нет, поэтому в результате дубли отмечаются числами (которые показывают номер пары). Наконец, после работы скрипта надо сделать выборку: [dup] <> 0 и прибить все выделенное. Можно в принципе добавить в скрипт и эту часть, но это сделает его несколько менее универсальным.

Код: Выделить всё

aview = av.getactivedoc
atheme = aview.getactivethemes.get(0)
aftab = atheme.getftab
f_shape = aftab.findfield("shape")
f_dup = Field.Make("dup",#FIELD_BYTE,1,0)
aftab.seteditable(true)
aftab.addfields({f_dup})

abitmap = aftab.getselection

for each rec in aftab
  ashape = aftab.returnvalue(f_shape,rec)
  for each rec2 in aftab
    if (rec <> rec2) then
      ashape2 = aftab.returnvalue(f_shape,rec2)
      if (ashape.returnextent = ashape2.returnextent) then
        abitmap.set(rec)
        if (aftab.returnvalue(f_dup,rec2)=0) then
          aftab.setvalue(f_dup,rec,rec2)
        end
        abitmap.set(rec2)
      end
    end
  end
end

aftab.seteditable(false)
aftab.setselection(abitmap)
aftab.UpdateSelection
пристегивайтесь, турбулентность прямо по курсу

Аватара пользователя
Игорь
Интересующийся
Сообщения: 33
Зарегистрирован: 19 ноя 2008, 12:25
Репутация: 6

Re: Удаление дубликатов линий на автомате

Сообщение Игорь » 01 дек 2008, 03:40

Sim, спасибо огромное.
Действительно удаление дубликатов в скрипт не надо добавлять. Вдруг встанет задача выделить все дубликаты. Так скрипт действительно универсален.

geologic
Гуру
Сообщения: 852
Зарегистрирован: 15 сен 2005, 13:19
Репутация: 5
Откуда: москва
Контактная информация:

Re: Удаление дубликатов линий на автомате

Сообщение geologic » 01 дек 2008, 11:51

Дубликаты линий удаляет любая программа работы с топологией, поскольку это типовая операция, обязательная перед сборкой полигонов. Рекомендую EdiTools (Geowizards) - много пользовались. Это там в разделе "Clean Polylines". Работает в два варианта -быстрый (сравнение по началу и концу) и полный (все вертексы).

Аватара пользователя
Игорь
Интересующийся
Сообщения: 33
Зарегистрирован: 19 ноя 2008, 12:25
Репутация: 6

Re: Удаление дубликатов линий на автомате

Сообщение Игорь » 02 дек 2008, 10:31

Geologic, спасибо большое.
Вот что называется век живи, век учись. Сколько пользуюсь ET, а про эту функцию не просек.

Ответить

Вернуться в «Arcview GIS»