Преобразовать линию в полигон

13

У меня есть шейп-файл с городскими районами, но, к сожалению, шейп-файл содержит только одну строку. Шейп-файл выглядит так:

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

Я хочу преобразовать эти линии в шейп-файл полигона области в QGIS. Я пробовал это с помощью инструмента «Линии к полигонам» (Vector> Geometry Tools> Lines to polygons), но он не работал правильно. После использования этого инструмента шейп-файл выглядит следующим образом:

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

Есть ли другой способ преобразовать шейп-файл линии в шейп-файл полигона области в QGIS?

Кстати, я использую QGIS 2.14.3 Essen.

Марк Уайт
источник
2
Я получил нечто похожее в последний раз, когда использовал этот инструмент. Я смог получить полигоны с помощью инструмента полигонизации.
Джонс
Спасибо за ваш ответ, где я могу найти инструмент полигонизации?
Марк Уайт
Полигонизацию можно найти здесь - Инструменты обработки, геоалгоритмы QGIS, инструменты векторной геометрии.
Klewis
Я попробовал это, но когда я запускаю полигонизатор, я получаю пустой файл формы :-(
Марк Уайт
Можете ли вы загрузить шейп-файл в Dropbox или аналогичный?
AndreJ

Ответы:

16

PolygonizeИнструмент от обработки инструментов до сих пор отлично работает для меня на простых линиях:

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

Однако необходимо, чтобы линии пересекались или имели общие вершины. И линии не должны иметь самопересечения.

Возможно, вам придется привязать угловые вершины, чтобы это заработало. Я обычно устанавливаю допуск привязки к вершине 10 пикселей.

Andrej
источник
1
Я тоже столкнулся с той же проблемой при преобразовании линий в полигоны. Инструмент «Полигонизация» решил проблему. gis.stackexchange.com/a/211794/62237
Sjs
7

Просто подсказка, если вы не можете найти Polygonizeинструмент. В моей установке QGIS 2.18.3 (Windows) я не мог найти Polygonizeинструмент Vector geometry toolsв панели инструментов. Мне потребовалось некоторое время, чтобы понять, что мне нужно установить python-shapelyбиблиотеку с OSGeo4W (спасибо Ник Хоптон: Perfect Polygons в QGIS ).

Николо
источник
Спасибо! Я был сбит с толку в течение долгого времени, потому что в QGIS для Windows есть инструмент полигонизации, предназначенный только для растров. Еще один шаг, который может или не может быть необходимым, - это включить геоалгоритмы QGIS в разделе «Обработка >> Параметры >> Поставщики»
Мэтт Уилки,
Спасибо за этот ответ. Я думал, что схожу с ума, не находя его больше ...
Гиснсайд
3

Глядя на ваше изображение, я предположил бы, что каждая линия не полностью охватывает область, линии просто действуют как заборы и не воссоединяются в начале. Ваши полигоны создаются на концах линий, поэтому инструмент «Линии на полигоны» работает нормально, это данные, с которыми связана проблема.

Боюсь, единственное, что вы можете сделать, о чем я могу подумать, - это оцифровать новый слой полигонов. К счастью, QGIS сделал это действительно легко с помощью инструмента оцифровки трассировки (значок магнита), который доступен в 2.14.

Knightshound
источник
0

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

lynxlynxlynx
источник
0

Протестировано на QGIS 2.18 и QGIS 3.4

Я могу предложить использовать "Virtual Layer"сквозной Layer > Add Layer > Add/Edit Virtual Layer....

Давайте предположим, что у нас есть пять линейных объектов "lines", см. Изображение ниже.

пример

С помощью следующего запроса можно достичь результата.

SELECT l.id, l.NAME, MakePolygon(AddPoint(l.geometry,StartPoint(l.geometry)))
FROM lines AS l
GROUP BY l.id

Выходной виртуальный слой будет выглядеть

Result_1

Как уже упоминалось @AndreJ, линии должны пересекаться или иметь общие вершины. И линии не должны иметь самопересечения. С точки зрения очистки топологии слоя, я могу предложить изучить v.cleanнабор инструментов GRASS.


Если линии имеют самопересечение, вы можете использовать ConvexHull со следующим запросом

SELECT l.id, l.NAME, ConvexHull(AddPoint(l.geometry,StartPoint(l.geometry)))
FROM lines AS l
GROUP BY l.id

случай

Выход


Ссылки:

Тарас
источник
0

Если полилинии перекрывают друг друга, Polygonizeинструмент не может обработать это следующим образом:

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

Однако Lines to polygonsинструмент работает, как ожидается, следующим образом:

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

M.Reza
источник