вычесть линейный слой из линейного

0 голосов
спросил 11 Апр, 08 от AndreyL (5,420 баллов) в категории Программные продукты Esri
Извиняюсь, может, этот вопрос уже задавался. Нужно из одного линейного слоя вычесть другой. Есть два слоя типа Line. некоторые линии в них совпадают. Нужно убрать из первого слоя все линии, которые есть во втором.
С полигонами Erase нормально работает, а с линиями ругается, говорит «Invalid Topology [CLASS_IS_NOT_LINE_CLASS]»

20 Ответы

0 голосов
ответил 15 Апр, 08 от Vadim (28,120 баллов)
image
0 голосов
ответил 15 Апр, 08 от JGBoBBy (4,940 баллов)
Только не "intersect" все-таки, а именно "are identical to" в поле that:

Это при условии, что линии действительно идентичны... Intersect может выделить кучу ненужных просто пересекающих линий, а нас интересуют только идентичные-совпадающие линии.
0 голосов
ответил 15 Апр, 08 от Vadim (28,120 баллов)
Ну естественно для для идентичных are identical to, картинку показал где копать стоит.
0 голосов
ответил 15 Апр, 08 от geologic (39,860 баллов)
Именно для топологических задач спокон веку "толерантность" и применяется, возьмите для примера любой ArcINFOвский инструмент, или тот же ET. Другое дело, что создатели ARcMap постарались скрыть этот факт от широкого пользователя, и те кто начал работать сразу с AM, об этом не всегда в курсе.

Возьмем самый простой инструмент, Select by Location. Да, в случае если ваши линии - идеальные копии друг друга, задача разрешится "просто и быстро". Если линии прошли не дай бог преобразование НЕ в ArcMap, а в ArcView, MapINFO, в другом инструментарии - никогда не будет гарантии, что они совпадут. Более того, проверка показывает, что они НЕ СОВПАДУТ в большинстве случаев и часть линий ваш "простой и быстрый" метод не идентифицирует как совпадающие. Разница в наших примерах например, чаще всего около 0,00033 и примерно 5-10 процентов линий. Этот феномен известен еще как "микрощели" для полигонов. Какие операции их производят на свет, пока до конца неясно. Досадная микроcкопия, всего лишь, если... Если это не десятичные градусы, тогда не только топология пострадает.

Словом, в общем случае, если вы не можете гарантировать идеального совпадения, и не можете проверить результат вручную, лучше "толерантностью" все же озаботиться - хотя бы провести проверку, сделать один разок и так и эдак. Это несложно и в "Select by Location" - там есть "Apply buffer" при выборке...
    
0 голосов
ответил 15 Апр, 08 от JGBoBBy (4,940 баллов)
Более развернуто:
в arcmap нажимаете- Selection->Selection by location. В поле I want to select features from: выбираете слой из которго хотите убрать совпадающие линии, в поле that: выбираете are identical to и выбирает второй слой. Нажимаете Ок, после завершения процесса в первом слое выделются линии совпадающие с линиями второго слоя. Их нужно удалить...
0 голосов
ответил 15 Апр, 08 от JGBoBBy (4,940 баллов)
Именно для топологических задач спокон веку "толерантность" и применяется, возьмите для примера любой ArcINFOвский инструмент, или тот же ET. Другое дело, что создатели ARcMap постарались скрыть этот факт от широкого пользователя, и те кто начал работать сразу с AM, об этом не всегда в курсе.

Возьмем самый простой инструмент, Select by Location. Да, в случае если ваши линии - идеальные копии друг друга, задача разрешится "просто и быстро". Если линии прошли не дай бог преобразование НЕ в ArcMap, а в ArcView, MapINFO, в другом инструментарии - никогда не будет гарантии, что они совпадут. Более того, проверка показывает, что они НЕ СОВПАДУТ в большинстве случаев и часть линий ваш "простой и быстрый" метод не идентифицирует как совпадающие. Разница в наших примерах например, чаще всего около 0,00033 и примерно 5-10 процентов линий. Этот феномен известен еще как "микрощели" для полигонов. Какие операции их производят на свет, пока до конца неясно. Досадная микроcкопия, всего лишь, если... Если это не десятичные градусы, тогда не только топология пострадает.

Словом, в общем случае, если вы не можете гарантировать идеального совпадения, и не можете проверить результат вручную, лучше "толерантностью" все же озаботиться - хотя бы провести проверку, сделать один разок и так и эдак. Это несложно и в "Select by Location" - там есть "Apply buffer" при выборке...
    


Это все верно и никто не спорит. Просто человек ясно указал, что линии - одни и те же. Для этих условий простейшее решение - Select by location.
0 голосов
ответил 15 Апр, 08 от Vadim (28,120 баллов)

Geologic, ну и как ты сам ответил никто не мешает через Select by location указать допуск

0 голосов
ответил 15 Апр, 08 от AndreyL (5,420 баллов)
Всем спасибо! Вопрос решен.
0 голосов
ответил 16 Апр, 08 от geologic (39,860 баллов)
2Вадим: разумеется, я по кнопкам и не спорю - плохо их знаю. Просто хотелось подчеркнуть со своей колокольни, что в подобных задачах tolerance в общем случае обязательна, я работу не принял бы без анализа оной от исполнителя, например. К слову, в подсказанной тобою "Planarize Lines" tolerance стоит явно - теперь ломаю голову, там-то она зачем??? :)
0 голосов
ответил 16 Апр, 08 от Vadim (28,120 баллов)
"Planarize Lines" tolerance стоит явно - теперь ломаю голову, там-то она зачем??? :)
Допуск Planarize Lines нужен в обязательном порядке. Постоянно  решаю задачу по построению топологически правильно построенной дорожной сети для создания простейшего нетворка, в которой все линии должны быть разбиты на простейшие сегменты. А жизнь показывает, что очень часто картографические данные приходят с неправильной топологией - висячие дороги, которые нетворк понимать не будет. Для этого при разбиении при помощи Planarize Lines задается допуск, который испраляет топологию.
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...