Як підключити лінії в мережі?


15

У мене формулерка ліній та ще один многокутник. Коли дві або більше ліній перетинаються багатокутником, їх слід з'єднати (відрізати), але іноді під час оцифрування вручну цього не відбувається. Мені потрібно знайти та виправити всі ці помилки. Я використовував v.cleanз GRASS GIS, і він автоматично перехоплював багато вершин, що було добре, але деякі з цих відключених ліній подалі від толерантності, яку я дав, і якщо я занадто сильно збільшив допуск, він починає генерувати інші типи помилок.

введіть тут опис зображення

Будь-які ідеї?


1
Просторово приєднайте кінцеві точки полілінії до багатокутників та підсумовуйте підрахунки по багатокутнику. Для кожного багатокутника, що містить більше однієї з'єднаної кінцевої точки, створіть полілінію, що складається з сегментів, що випромінюють від центральної точки цих кінцевих точок до самих кінцевих точок ("зірка"). Злиття зірок з оригінальними поліліній. Очистіть результат, щоб усунути будь-які самоперетинання, що виникають. Кожен з цих кроків підтримується (і може бути автоматизований) повністю спроможними ГІС. Оскільки я не знайомий з деталями QGIS або GRASS, пропоную це рішення лише як коментар.
whuber

але іноді всі лінії закінчуються поза полігоном ...
vascobnunes

1
Що представляють ці рядки? Якщо вони є річками, чи кодуються вони додатковою інформацією, такою як назва чи порядок потоку? Чи спрямована мережа (наприклад, річкова мережа), як, наприклад, два потоки першого порядку повинні перетікати в потік другого порядку. Напевно, я намагаюся сказати, що ви, можливо, захочете поставити деякий інтелект на процес оснащення, щоб подолати проблему з хитрим хапанням із збільшенням терпимості до пошуку.
Hornbydd

1
Здається, ваш коментар суперечить питанню. Здається, запитання говорить про те, що ви хочете оснастити вершини, що потрапляють у загальний багатокутник. Якщо вершина виходить за межі багатокутника, ви не даєте жодних критеріїв того, як до неї слід ставитися! Отже, яке саме співвідношення між багатокутниками та полілініями?
whuber

1
Я погоджуюсь з whuber; можливо, вам слід уточнити питання. Здається, ви хочете, щоб лінії, що знаходяться в полігоні, а також "закрити", але виключаючи ті, що є "в", але належним чином з'єднані?
Даррен Коуп

Відповіді:


7

Моє розуміння проблеми полягає в наступному:

Якщо кінцева точка полілінії перетинає полігон, то полілінію потрібно з'єднати (додавши або відрегулювавши вершини) до всіх додаткових кінцевих точок полілінії, які перетинають той самий багатокутник.

Деякі кінцеві точки полілінії не перетинаються багатокутника, не підкреслюючи, але вони повинні бути з'єднані, як зазначено вище.

Ця відповідь ґрунтується на деяких вже даних, але не є повною, оскільки мені невідомі всі команди QGIS - можливо, хтось ще може до цього додати?

  1. Для кожної полілінії витягніть координати кінцевих точок ( Вектор> Інструменти геометрії> Витягніть вузли, потім виправте) та обчисліть, чи є вони у полігоні ( Вектор> Інструменти дослідження> Вибрати за місцем розташування ).

  2. Для кінцевих точок поліліній, які знаходяться у полігоні, подовжте цей кінець полілінії до центру багатокутника (Витягніть центр полігону за допомогою Вектор> Інструменти геометрії> Центроїд багатокутника , не впевнені в модифікації лінії, хоча ви можете працювати з полілінійні вершини як точки і додайте додаткові з відповідною нумерацією перед реконструкцією модифікованої полілінії за допомогою плагіна "Показ в шлях")

    Ви згадуєте, що можуть бути ситуації, коли деякі або всі лінії були правильно з'єднані, у цих ситуаціях (їх можна визначити за збігом кінцевих точок полілінії), ви можете використовувати місце збігу кінцевих точок, а не центроїд багатокутника як точку розширення будь-які додаткові непоєднані полілінії до цього полігону.

  3. Для кінцевих точок полілінії, що знаходяться поза полігоном, простягніть цей кінець полілінії до центру найближчого багатокутника. Знову ж таки, я не впевнений у підрахунку найближчого багатокутника, хоча модуль GRASS v.distance виглядає, щоб зробити це.


це хороше обґрунтування рішення проблеми. Я також дійшов до чогось подібного з відповіддю від alexgleith. Але я затримався в операції з "простягання цього кінця полілінії до центру найближчого багатокутника". Питання зараз полягає в тому, як це зробити? Якщо я застосую v.clean.snap до центроїдів полігонів, він все одно перемістить будь-які вершини, які не є кінцевими точками ...
vascobnunes

Одним із підходів було б перетворення поліліній у точки, як описано, і, якщо необхідно, додати додаткову точку на початку або в кінці заданого рядка, як це продиктовано розташуванням існуючої початкової або кінцевої точки. Місце доданої точки було б центроїдом багатокутника, а точці присвоювали б порядковий номер вершини -1 або 1000000, щоб розмістити його на початку або в кінці полілінії. Тоді це дозволить реконструювати полілінії за допомогою інструменту "
Потоки

2

Я думаю, що я міг би це зробити за допомогою певного користувальницького алгоритму ... Зверніть увагу, як би ви хотіли його реалізувати, але я думаю, він би спрацював.

Для кожного рядка, для кожної кінцевої точки, зробіть точку в полігоні для вершини в кінцевій точці і зв’яжіть її з багатокутником.

Тоді для кожного багатокутника, якщо між кінцевою точкою однієї лінії пов'язано більше, я б об'єднав (перемістив) їх усі до середньої координати або, можливо, до центральної точки багатокутника.

Це досить просто. Але не доступний у стандартних операторів. Я думаю, це можна зробити в ArcGIS з кодуванням днів.

Ще одна примітка. На зображенні, яке ви розмістили, одна з ліній знаходиться поза полігоном ... Ви могли б впоратися з цим простішим способом, просто знайшовши найближчу вершину до кожної кінцевої вершини, гарантуючи, що близькість взаємна (я думаю, що це необхідно, щоб у вас вершини оснащувалися лише одним способом), тоді ви можете перемістити їх до середнього положення вершин.


1

Цікава проблема! Я не можу придумати спосіб автоматичного виконання оснащення, але ось крок у визначенні областей, щоб принаймні переглянути ручне виправлення:

  • Додайте новий рівень стовпчика до рівня рядка та встановіть його рівним "1" для всіх функцій.
  • У розділі Вектор> Приєднати атрибути за місцеположенням встановіть цільовий шар на багатокутний шар, а рівень лінії - як шар приєднання. Потім виберіть "Візьміть підсумок пересічних функцій" і натисніть "Сума". Укажіть місце для вихідного файлу та "ОК".
  • Отриманий файл багатокутника буде початковим шаром багатокутника, але з деякими додатковими полями. Поле SUM - це те, що ви хочете; коли це 2, це означає, що тоді ви можете збільшити масштаб і вручну оснастити функції.

Залежно від ситуації (кількість функцій, кількість, які перебувають у цій ситуації порівняно з тими, яких немає тощо), це може заощадити певний час.

РЕДАКТУВАННЯ. Ви також можете використовувати багатокутники з сумою 2 для створення підмножини лінійних шарів, а потім запустіть очистку для тих, хто має більший допуск, щоб не змінити інші функції.


Я вже робив щось подібне. Я навіть використовував v.net для отримання вузлів для ліній і робив просторовий вибір багатокутників, що відповідають вузлам. Я знаходжу багато помилок, щоб виправити це, але у мене все ще є 3 великі проблеми: 1) Є тисячі помилок, щоб виправити вручну, що займає тривалий час; 2) я не отримую всіх помилок, оскільки в деяких випадках лінії або вузли навіть не торкаються багатокутників; 3) я отримую помилки, які не є помилками, тому що, коли два рядки підключаються належним чином, вони також вибираються.
vascobnunes

0

як тільки у вас є кінцеві точки, я б зробив павукову діаграму, приймаючи полігони центроїди як споруди та кінцеві точки довколишніх ліній як цілі. Ви виконуєте аналіз діаграми павука, і в результаті у вас буде сегмент для кожної полілінії.

Це спрацювало б навіть для тих, хто закінчується поза полігонами. Як це зробити в QGIS Я не знаю, вибачте, але я б це робив у продуктах ESRI, які добре знаю. Це я зрозумів, коли Вауер у першій відповіді запропонував побудувати "зірку".

Я впевнений, що тут є люди, які знають, як проводити такий аналіз в QGIS


4
Ласкаво просимо на біржу стек GIS! Я помітив, що ваша відповідь привернула деякі голоси та підозрює, що це тому, що ви запропонували альтернативу технології, якою користується анкер (GRASS / QGIS). Моя рекомендація полягатиме в тому, щоб такі пропозиції розміщувались як коментарі, а не відповіді, і якщо запитуючий виявляється зацікавленим, тоді передайте інформацію у відповідь.
PolyGeo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.