Як заповнити отвори в полігонах автоматично?


12

Чи є в QGIS можливість автоматичного заповнення отворів у полігонах шляхом встановлення параметрів, наприклад, максимальної площі, відстані між прикордонними лініями? Я хочу видалити / заповнити отвори, які дуже "тонкі" / маленькі.


1
Вас цікавлять отвори (кільця всередині полігонів) чи зменшення зазорів між окремими багатокутниками?
Simbamangu

Чи повинно це бути на основі QGIS? Раніше я веду блоги про те, як це досягти за допомогою просторового SQL у PostGIS ( geospatial.commons.gc.cuny.edu/2013/11/04/… ). Якщо ви не працюєте з PostGIS, я, ймовірно, міг би адаптувати це для вас до SpatiaLite, який, напевно, якщо ви використовуєте QGIS, ви можете вже мати SpatiaLite у своєму інструментальному ланцюжку.
Лі Хачадоріан

Відповіді:


11

Використовуючи QGIS 2.10.1-Pisa з версією Processing 2.10.2, є декілька інструментів, доступних у панелі інструментів обробки :

  • Заповнити отвір інструментом, яким можна вказати максимальну площу .
  • Видаліть отвір інструмент, який буде застосовано до всього вхідного шару.

Сподіваюся, це допомагає!


1
Просто щоб перевірити, параметр max area, тобто максимальний розмір отвору, який потрібно заповнити? Отже, якщо проект UTM за метром, якби макс становив 10000, це означало б, що найбільша яма, яку потрібно заповнити, буде гектаром, а будь-яка більша, ніж ця, залишиться?
BillW

1
@BillW - Так, я вважаю, що саме це і робить :)
Йосип

11

Я зіткнувся з тією ж проблемою, що і у вас, з цим файлом форм, що має багато прогалин між багатокутниками.

Оригінальний файл із пробілами

Щоб вирішити проблему, ви можете використати незначну модифікацію методу tshiffle:

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

Об'ємний_полігон

Difference_tool

Ця дія створить новий профіль форми, що складається лише з одного многокутника, тому вам доведеться підірвати його на окремі частини. Для цього ви можете скористатись інструментом "Вектор / Геометрія / Інструмент для багаточастинних".

Різниця_результат

Multi_to_single

Після цього видаліть зовнішню сутність. Тепер у новому форматі ви маєте кілька полігонів, що покривають прогалини вашого початкового покриття.

прогалини_покриті

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

Союз

  1. Усі прогалини тепер з’являться як порожні записи в базі даних (наприклад, 72 рядки). Сортуйте свою таблицю за допомогою обласного поля та візьміть значення з найменшого багатокутника у вихідному файлі. Для цього випадку 0,13645 га.

база даних

  1. Нарешті, скористайтеся інструментом «Усуньте полігони ковзання» з налаштуваннями, показаними на зображенні.

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

  1. Кінцевий результат не має жодних прогалин.

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


Чи можете ви додати більше інформації щодо вибору параметрів? Що таке "цінність"? Сторінка документації QGIS є дуже короткою. Дуже елегантна відповідь, шкода, що початковий користувач не прийняв жодної відповіді!
user3386170

1
"Значення" - це величина, яку ви використовуєте для порівняння. У прикладі використане поле "площа" було встановлено в гектарах, тому 0,1 означає: ліквідувати багатокутники меншими або рівними 0,1 га.
gtapko

gtapko, чи можете ви надати детальну інформацію про фазу 3? я не можу це зрозуміти, дякую
newGIS

4

Можливо, є більш витончені рішення там, але це завжди працювало для мене.

1) Створіть «заповнення дірок» багатокутників. Для цього намалюйте гігантський багатокутник, більший за оригінал, і скористайтеся інструментом «різниця». Якщо ви намалювали набагато більший багатокутник, у вас будуть всі полігони, що заповнюють отвори, плюс один більший багатокутник, який обходить початкову форму. Видаліть цей великий багатокутник, зберігаючи багатокутники "заповнення дірок".

2) Об’єднайте багатокутники, що заповнюють отвори, з оригінальним форматом. Якщо ви хочете лише заповнити отвори, які відповідають певним критеріям (тобто під X числом квадратних кілометрів), ви можете профільтрувати тут.

3) Розведіть щойно злитий багатокутник на загальному полі.


Не зрозуміло щодо кроку 3, як хтось знайде спільне поле?
iRfAn

На цьому кроці спільним полем може бути що завгодно, мета - просто розчинити межі між багатокутниками. Ви можете використовувати наявне поле або просто додати його.
tshiffle

4

У python / shapely це може заповнити ваш багатокутник:

import shapely
from shapely.geometry import Polygon
filled_shape = Polygon(shape_with_holes.exterior)

2

Я бачив деякі пояснення, що слідують тим самим шляхом, що й gtapko та tshiffle, але жодне не працювало для мене, оскільки неправильні геометрії зробили інструмент різниці нефункціональним. Отже, я придумав власне рішення, яке не на 100% автоматизоване, але воно є керованим. Напевно, хтось це вже зрозумів, але я ризикую:

1) Створіть ідентифікатор на початковому, пошкодженому шарі

Створити атрибут ID просто, але таке рішення є моїм, тому я перегляну його.

Спочатку потрібно відкрити таблицю атрибутів, а потім перейти до польового калькулятора , який є кнопкою, що нагадує абак. Там вам нададуть можливість створити нове поле або оновити наявне. На малюнку вище я створюю новий під назвою "Ідентифікатор". Формула знаходиться в кінці малюнка. (Вибачте за те, що мій QGIS був налаштований на іншій мові. Оскільки дизайн та формули абсолютно однакові у всіх мовних версіях, я не думаю, що він тут увійде в наш спосіб.)

2) Перетворіть багатокутники на лінії

Цей крок розташований у меню « Вектор> Геометрія» у меню. Ваша перетворена форма повинна виглядати так:

Одразу після перетворення багатокутників у прямі, вам доведеться зробити саме навпаки, що є ...

3) Перетворити лінії на багатокутники

Параметри знаходяться прямо поруч. Знову ж таки, не будемо мати на увазі мовний бар’єр.

4) Радійте тому, що ви зробили кроки 2 та 3, це тому, що тепер ви впевнені, що ці рядки будуть вважатися багатокутниками, а значить, тепер у таблиці атрибутів є своя лінія. Якщо ви це перевірите, це буде виглядати приблизно так:

Перший - ЗАВЖДИ весь полігон (повірте, я сьогодні видалив пару сотень рядків ...), а решта - це вільні лінії посередині. Можна включити редагування та підготуватися до дії. Якщо ви вирішили спробувати це, слід пам’ятати про дві речі: організуйте свою таблицю по ідентифікації , таким чином ви впевнені, що нічого не пропускаєте, і використовуйте shift для вибору кластерів даних, як і будь-яка інша програма .

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


Чи можете ви оновити свої зображення? Посилання порушені!
Simbamangu

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