GIS-LAB

Географические информационные системы и дистанционное зондирование


Форумы GIS-Lab.info

Геоинформационные системы (ГИС) и Дистанционное зондирование Земли


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

Arcview GIS 3.x, Arcinfo Workstation, Mapobjects

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

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

Специалисты, помогите пожалуйста.
Все таки хочется на автомате удалять дубликаты линий.
Кому не лень поломать голову - шейп в прицепе.
  • 0

Вложения
Connect.zip
(3.95 КБ) Скачиваний: 413
Аватара пользователя
Игорь
Интересующийся
 
Зарегистрирован: 19 ноя 2008
 
Сообщения: 33
Репутация: 6

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

Сообщение Максим Дубинин » 29 ноя 2008, 05: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
  • 0

пристегивайтесь, турбулентность прямо по курсу
Аватара пользователя
Максим Дубинин
NextGIS
 
Зарегистрирован: 06 окт 2003
Откуда: Москва (на карте)
 
Сообщения: 8872
Репутация: 631
Статьи: 231
Проекты: 12/6

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

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

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

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

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

Сообщение Максим Дубинин » 30 ноя 2008, 06: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
  • 0

пристегивайтесь, турбулентность прямо по курсу
Аватара пользователя
Максим Дубинин
NextGIS
 
Зарегистрирован: 06 окт 2003
Откуда: Москва (на карте)
 
Сообщения: 8872
Репутация: 631
Статьи: 231
Проекты: 12/6

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

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

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

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

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

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

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

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

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

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

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

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


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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


(Геокруг)

© GIS-Lab и авторы, 2002-2013. При использовании материалов сайта, ссылка на GIS-Lab и авторов обязательна. Содержание материалов - ответственность авторов (подробнее).