поправить топологию в АркГИС

ArcGIS 8.x,9.x,10.x (Arcview, ArcEditor, Arcinfo).
Ответить
AndreyL
Завсегдатай
Сообщения: 483
Зарегистрирован: 17 авг 2006, 14:04
Репутация: 0
Откуда: Новосибирск

поправить топологию в АркГИС

Сообщение AndreyL » 09 окт 2007, 11:51

Задачка, похоже, классическая. Есть полигональный слой, отдельные полигоны налегают друг на друга. Нужно из тех, которые внизу, вырезать все, которые вверху. Наложения могут быть многослойными. Значения атрибутов должны быть такие, как в самом верхнем полигоне. Сама картинка при этом не должна измениться, а топология исправится.

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

Сообщение geologic » 10 окт 2007, 13:46

никто не ответил, придется мне. Просто прорезать одно покрытие другим достаточно просто - геооперации типа Union или Intersect, по выбору. Атрибутика отслеживается для всех. Однако у вас "крышки" и подложка - в пределах одного слоя. Попробуйте тот же Union со вторым фальш-слоем, должно сработать.

Впрочем, это трюки. Для нормальной правки топологии по идее разработчиков ArcMap, надо создать геобазу, импортнуть туда ваш слой, создать правило "не должно быть наложений", запустить его на проверку, потом запустить "инспектор ошибок" тупо и нудно сидеть и щелкать "да" на каждое предложенное исправление. Так редко кто делает, поскольку есть испокон веку простой и мощный способ "прогнать через покрытие". При этом включается команда Build, которая и продавливает крышки. Атрибуты сохраняются.

Насчет верхнего-нижнего элемента. Почти любая из операций прорежет вам ВСЕ. То есть если наложения слегка расходятся, то останется куча щепок - и все с атрибутами. Если крышки абсолютно совпадают, останется одна неизвестно какая - порядок в пределах одного слоя ГИС никак не отслеживается. Идеально было б найти операцию, которая оставляет все атрибуты, а вы уж там выберете по критерию (обычно физ. порядок проглядывается). Но обычно заложено так, что только пара остаётся - верхний и нижний. ну, надо еще подумать.

AndreyL
Завсегдатай
Сообщения: 483
Зарегистрирован: 17 авг 2006, 14:04
Репутация: 0
Откуда: Новосибирск

Сообщение AndreyL » 11 окт 2007, 14:32

Можно чуть подробнее. Слой в топологию добавлен, правило тоже. Когда проверяю топологию, дает все ошибки как надо. Запускаю инспектор ошибок, выделяю все ошибки, вычитаю – получаю только те участки, на которых нет перекрытий. Т.е. самый нижний полигон, у которого везде, где на него хоть что-нибудь накладывалось, зияют дырки. А как "прогнать через покрытие"?

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

Сообщение Максим Дубинин » 12 окт 2007, 03:56

А как "прогнать через покрытие"?
shapearc infile outfile class
clean outfile # 0.000000001 0.0000000001 poly
regionpoly outfile result class

в деталях могу ошибаться, и могут быть нюансы, была недописанная статья на эту тему, надо дописать будет, там поточнее инструкция
пристегивайтесь, турбулентность прямо по курсу

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

Сообщение geologic » 12 окт 2007, 10:44

Конвертнуть ваши полигоны в покрытие можно через ArcToolBox. Однако нужна лицензия ArcINFO, чтобы это сработало.

Как править топологию через инспектор, в деталях я не помню, давно это было. Но все работало хорошо еще в восьмерке, просто надо терпеливо разобраться. Инструмент не для слабонервных.

Почему-то вас не заинтересовал первый, самый простой вариант - сделать UNION вашего слоя с фальшивкой. Проверил в ArcView, отлично работает, пакетно, выдает атрибуты именно верхней крышки. Думаю, в ArcMap будет то же самое. Фальшивку надо класть под низ, разумеется.

AndreyL
Завсегдатай
Сообщения: 483
Зарегистрирован: 17 авг 2006, 14:04
Репутация: 0
Откуда: Новосибирск

Сообщение AndreyL » 12 окт 2007, 11:34

Чуть помедленнее. Конвертировать полигоны в покрытие не проблема, только, похоже, это ответ на другой вопрос, тоже мой. Кстати, спасибо за ответ, только не понял, как в покрытии сохранить атрибутивную таблицу – там легенда. И почему в покрытии объектов больше, чем в исходном слое?

Про фальшивку не понял – что такое фальшивка? Пустой слой? Но тогда объединение и пересечение не проходят, говорит «The operation was attempted on an empty geometry.».

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

Сообщение geologic » 12 окт 2007, 16:32

насчет покрытия пока не скажу - надо опять влезать, вспоминать.

А вот насчет union да, фальшивка может быть пустой. У меня UNION c с пустым слоем работает и в ArcView 3.x, и в ArcMap 9.2. Если почему-то не хочет, можно и с полным слоем юнионить, нарисуйте квадрат размером с вашу географию. Будет просто лишний ободок - и все. Да, проверил еще раз - в общем случае "крышек" остается много, сколько было плюс по одной на каждую подложку. Однако их порядок сохраняется, самая верхняя, например, стабильно оказывается внизу. Так что можно додуматься, как удалять лишние пакетно.

Однако этот путь не адекватен для ГИС, и возможны затыки, как в вашем случае. Путь с инспектором и "через покрытия" все же более надежен. Словом, надо бы все варианты погонять и иметь в виду для разных случаев.

AndreyL
Завсегдатай
Сообщения: 483
Зарегистрирован: 17 авг 2006, 14:04
Репутация: 0
Откуда: Новосибирск

Сообщение AndreyL » 15 окт 2007, 12:56

С Объединением и Пересечением, к сожалению, ничего не получилось. Эти инструменты иногда дают интересную вещь – есть маленький полигончик, а при пересечении рисуется огромный ровно вокруг исходного. К тому же, если под полигоном есть граница другого, то он будет разбит по этой границе, хотя это меньшая проблема.
geologic писал(а):Путь с инспектором и "через покрытия" все же более надежен. Словом, надо бы все варианты погонять и иметь в виду для разных случаев.
Не понял, это как? В покрытии элементов значительно больше, чем в исходном слое, а атрибуты исходного не сохраняются.

AndreyL
Завсегдатай
Сообщения: 483
Зарегистрирован: 17 авг 2006, 14:04
Репутация: 0
Откуда: Новосибирск

Сообщение AndreyL » 15 окт 2007, 15:26

В общем, разбить на полигоны так, чтобы не пересекались, не сложно. А вот как теперь атрибуты вернуть? Тут целую статью писать можно. В краце так:

Все операции лучше проводить в базе геоданных
1. Делаем из слоя покрытие (полигоны в покрытии не пересекаются)
Перегоняем покрытие в слой (иначе ЕТ некорректно может работать)
2. Через ЕТ делаем из слоя покрытия точки типа Меток
3. Идентифицируем точки начальным слоем.
В этом слое у некоторых точек будут повторяться идентификаторы точечного слоя.

Далее в соседней базе данных
4. Делаем запрос на слой идентификации - группировка по повторяющимся идентификаторам, максимум по первичным
5. Делаем запрос на создание таблицы - объединяем слой идентификации с запросом через поле максимума,
запрашиваем поле группировки, Цвет и Хендлер
(легенда определяется цветом, а у каждого объекта исходного слоя уникальный хендлер)
На выходе таблица с количеством записей как в покрытии, поле группировки соответствует идентификатору слоя покрытия

Возвращаемя с АркГИС
6. Подцепляем таблицу к слою покрытия (у них идентификаторы одинаковые)
проверяем совпадение цветов
7. Делаем Диссолв про полям Цвет и Хендлер
Проверяем удаление лишних границ

Всем огромное СПАСИБО!

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

Сообщение geologic » 15 окт 2007, 20:39

ну где-то так примерно, надо въехать на своих примерах, чтоб понять.

ДОбавлю аллаверды

- целостное покрытие и правда несложно. У меня стабильно работает и Union в 9.2, все прорезает, но тогда остается много лишних одинаковых накладок. Разумеется, атрибуты сохраняются, но они не помогают.

- конвертнуть в покрытие аркинфо дает целостную топологию, но атрибуты слетают. Восстанавливать можно и без ET - точечные метки все есть в подслое LABEL.

- В любом случае при изменении топологии (а здесь именно изменение) метки вернут "на место" не все атрибуты, некоторые могут съехать.

- Восстановление атрибутов сильно зависит от конкретики ваших слоев. Если только крышки, один алгоритм, если еще и краевые нахлесты - другой, более общий. Если щели еще и с ними бороться.

Да, специально проверил - Union сильно барахлит в восьмерке, не работает с нулевым слоем, например.

AndreyL
Завсегдатай
Сообщения: 483
Зарегистрирован: 17 авг 2006, 14:04
Репутация: 0
Откуда: Новосибирск

Сообщение AndreyL » 16 окт 2007, 17:34

geologic писал(а):- целостное покрытие и правда несложно. У меня стабильно работает и Union в 9.2, все прорезает, но тогда остается много лишних одинаковых накладок. Разумеется, атрибуты сохраняются, но они не помогают.
Union, к сожалению, работает не всегда корректно – наткнулся на одну карту (в Кореле сделана), где несколько полигонов вели себя странно (писал уже). Один из них оказался с перехлестом – восьмеркой. С остальными разбираться не стал – нужен надежный алгоритм, чтобы не разбирать каждый рисунок – их в перспективе много будет.
geologic писал(а):- конвертнуть в покрытие аркинфо дает целостную топологию, но атрибуты слетают. Восстанавливать можно и без ET - точечные метки все есть в подслое LABEL.
У меня подслой LABEL вообще не грузится – говорит нет идентификатора в таблице.
geologic писал(а):- В любом случае при изменении топологии (а здесь именно изменение) метки вернут "на место" не все атрибуты, некоторые могут съехать.
Пока метки возвращают все что нужно на место и ничего не съезжает – если ставить метки как подписи к полигонам (именно через ЕТ), то они всегда будут внутри полигонов. А полигоны не пересекаются. А идентификация, как выяснилось, создает на каждую точку несколько точек по количеству полигонов, которые ее накрывают, причем подряд, от нижнего к верхнему.
geologic писал(а):- Восстановление атрибутов сильно зависит от конкретики ваших слоев. Если только крышки, один алгоритм, если еще и краевые нахлесты - другой, более общий. Если щели еще и с ними бороться.
Про щели и нахлесты можно попробовать через кластер толерантности (при конвертировании в покрытие, например, еще была тема viewtopic.php?t=1691), но пока считается, что художник, рисовавший карту, имел ввиду именно то, что нарисовал, и картинка должна быть именно такой, какая была. Забыл, кстати, последним шагом нужно отсортировать по Хендлеру – заметил, когда разным полигонам разный цвет границы назначил.

Ответить

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

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

Сейчас этот форум просматривают: Ahrefs [Bot] и 5 гостей