Розведіть багатокутники в QGIS (GEOS) з допуском


11

У мене є векторний шар багатокутника, який представляє площу, затоплену в паводку. Шар створений таким чином, що деякі області складаються з декількох менших дотикових багатокутників (див. Скріншот нижче, позначений "оригінальними даними").

Я хотів би розчинити багатокутники там, де вони торкаються. Якщо я використовую інструмент георозробки для розчинення у fTools QGIS, який використовує бібліотеку GEOS, я отримую деякі несподівані результати (див. "Розчинення за допомогою QGIS fTools"). Схоже, що GEOS не використовує поріг для визначення того, чи дотикуються багатокутники, як зазначено в цих питаннях:

http://trac.osgeo.org/qgis/ticket/3126

http://trac.osgeo.org/qgis/ticket/3184

http://hub.qgis.org/isissue/2806

Такий же підхід у ArcGIS дає очікуваний результат (див. "Розчинення з ArcGIS 10.1").

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

Питання, пов’язані з цим (без відповідей): Як встановити значення допуску засобу геообробки в QGIS?

Посилання на вибіркові дані у вигляді формату: https://www.dropbox.com/s/c8ns7wwfv289ad0/sample.zip

розчинити багатокутники v.dissolve


Вирішення проблеми полягає в тому, щоб спочатку розростатися, а потім стискати полігон, розчинений fTools (буферизацією спочатку позитивним, а потім негативним буфером).
Джейк

Я намагався це зробити, але я закінчував інші проблеми (наприклад, i.stack.imgur.com/LnFJy.png ). Тут синя область створюється, коли я буфер / розчинення / neg-буфер, де цього не повинно бути. Це не надто краще, ніж початкова проблема. Я не бачу, як я можу відновити початковий "гострий" кут.
Snorfalorpagus

Відповіді:


14

У цьому випадку виглядає, що вам потрібно допомогти розчинити інструмент, попередньо виправивши топологію. Ось як це можна зробити в GRASS.

Коли ви завантажуєте файл форми, GRASS бачить це:

Кожен хрест позначає площу. Ви можете бачити, що на прикордонних лініях є кілька хрестів: Це полігони косого, спричинені незначним зміщенням між прикордонними лініями.

  1. Видаліть багатокутники, що утворюються за допомогою проміжків між справжніми багатокутниками:

    v.clean input=sample output=tempA --o tool=rmarea thresh=0.001
  2. Обрізання межових ліній:

    v.clean input=tempA output=tempB --o tool=snap thresh=0.001
  3. Розбийте граничні лінії на нових перехрестях:

    v.clean input=tempB output=tempA --o tool=break thresh=0.001
  4. Видаліть вже повторювані граничні лінії:

    v.clean input=tempA output=tempB --o tool=rmdupl thresh=0.001
  5. Розведіть багатокутники

    v.dissolve input=tempB output=cleaned --o column=ID

Et voilà:


Дякую @Jake Це дуже чітка відповідь. На жаль, коли я намагаюся застосувати процес до всього мого набору даних (охоплює 2500 км2), я отримую помилку від оснащення інструменту "ПОМИЛКА: G_realloc: не в змозі виділити 144720024 байт пам'яті на snap.c: 186". Я думаю, що мені доведеться розбити це на більш дрібні шматки. Це все повинно бути добре, оскільки я вже розбиваю його на 0,25 км2, щоб прискорити перехрестя / просторову індексацію (це поле "ідентифікатор" у вибіркових даних).
Snorfalorpagus

7

Використовуйте команду GRASS GIS v.dissolve (у плагіні Sextante -> Команди GRASS -> Вектор)

Якщо я швидко відтворять вам приклад: введіть тут опис зображення

Результат з v.dissolve:

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

Пояснення

Проблема зрозуміла легко. Файл форми не має топології, якщо дві ділянки мали спільну межу, ця межа буде оцифрована два рази, а також збережена у двох примірниках.

Це ви добре бачите, коли намагаєтесь редагувати файл форми:

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

GASS GIS (як ArcGIS) - топологічна гіс. Коли ви імпортуєте файл форми у GRASS, отриманий шар має топологію: спільна межа між двома областями існує один раз і поділяється спільно.

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

З цієї причини, коли ви хочете розчинити файл форми ( розпустити два межі ), у вас можуть виникнути проблеми (у QGIS, GvSIG, OpenJUMP або старій ArcView 3.x), див. ArcUserI: Розуміння топології та Shapefiles .

У GRASS v.dissolve призначений для розчинення загальних меж між областями з однаковим номером категорії


1
Я здогадуюсь, що це числова проблема, і мені цікаво, чи зможе ваша досить хороша копія геометрії ОП охопити ті самі числові властивості?
Чау

@Chau: v.dissolveмає параметр допуску, який вирішує проблему ОП.
Джейк

Цю деталь слід включити до вищезгаданої відповіді, дякую за уточнення :)
Чау,

У запитання я додав посилання на вихідні дані як файл форми. Коли я використовую, v.dissolveце, здається, працює, за винятком того, що він "заповнює" маленький квадрат посеред функцій. i.stack.imgur.com/AA59l.png
Snorfalorpagus

1
Пропоную пояснення
ген
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.