Если у вас пропала геометрия линий векторного слоя, то это может быть связано с различными причинами, такими как повреждение файла, ошибки при сохранении или неправильное использование программного обеспечения.
в QGIS есть несколько инструментов восстановления, которые могут помочь восстановить слой:
“Проверка целостности геометрии” (Geometry Check) – проверяет слой на наличие ошибок геометрии, таких как пересекающиеся грани, невыпуклые полигоны и т.д. Этот инструмент может помочь выявить и исправить проблемы, которые могут привести к потере геометрии.
“Восстановление геометрии” (Geometry Repair) – позволяет исправить ошибки геометрии, такие как невыпуклые полигоны, пересекающиеся грани и т.д. Этот инструмент может помочь восстановить потерянную геометрию, если она была повреждена.
“Инструменты восстановления” (Recovery Tools) – набор инструментов, позволяющих восстановить поврежденные или потерянные данные векторных слоев. Например, инструмент “Восстановление слоя” (Layer Recovery) позволяет восстановить слой из сохраненных версий проекта, а инструмент “Восстановление атрибутов” (Attribute Recovery) позволяет восстановить потерянные атрибуты слоя.
I have a polygon layer (obtained from Raster to Polygon) with some invalid geometries. I would like to know how can I solve this without going one by one
This may be what answer is suggesting:
After trying solution from answer, the result is not correct.
Any idea?
PolyGeo♦
64.6k28 gold badges105 silver badges326 bronze badges
asked Aug 9, 2017 at 14:22
3
A few options for you:
PostGIS (if available, easy to install locally if not and well worth it)
UPDATE TABLE schema.tablename
set geom = ST_MakeValid(geom);
There is also the geometry checker plugin that ships with QGIS but is usually turned off (installed plugins), that has the option to fix all errors.
GRASS v.clean is also an option, available under processing tools in QGIS.
answered Aug 16, 2017 at 14:10
Phil BarlowPhil Barlow
2312 silver badges6 bronze badges
5
Try doing a buffer of zero, this should fix up your intersection issues
answered Aug 9, 2017 at 20:14
Liam GLiam G
2,12610 silver badges11 bronze badges
3
QGIS продолжает набирать популярность, и публикую полезные функции, которыми часто пользуюсь. Рекомендую на данном этапе (17-11-2015) пользоваться версией 2.8.3, а не 2.12 – первая, как мне показалось, стабильнее. Хотя я могу ошибаться.
Кратко разберем некоторые функции раздела “Вектор” и его подраздела “Обработка геометрии”. Все функции подразумевают создание нового слоя, поэтому готовьтесь к множеству файлов
- Если вам нужно добавить поля X, Y, например, для слоя точек, то можно воспользоваться “Экспортировать/добавить поле геометрии…” Хотя я предпочитаю создавать вычисляемые поля вручную
- Команда “Упростить геометрию” позволит вам уменьшить количество точек, к примеру, на горизонталях или полигонах лесных массивов.
- Иногда геометрия слоя полигонов состоит из т.н. мультиполигонов. Команда “Разбить составную геометрию” позволит вам создать отдельные полигоны. Обратный результат поможет достичь команда “Объединить геометрию в составную”
- Действительно полезная команда – “Полигоны в линии”. Эта функция часто надобится при экспорте полигонального слоя в dxf (см. видео здесь). Полигоны превращаются в линии и потом экспортируюся в dxf. Обычно полигональный слой приходит в dxf в виде штриховок без контура. Для архикадчиков такой проблемы нет. А вот пользователям AutoCAD или SketchUp это создаст трудности. “Линии в полигоны” подобна предыдущей
When working with vector data layers, you may encounter geometry errors. These errors often become part of your data after running geoprocessing, digitizing, editing or data conversion. QGIS3 comes with build-in tools and algorithms to detect and fix invalid geometries. This tutorial will show you a typical workflow for handling invalid geometries in your data.
Note
Different software systems implement different notions of geometry validity. But the leading standard for the geometry model for use in a GIS is the OGC Simple Features Specifications (SFS). In this tutorial, we will use GEOS library to check for geometry validity which uses this standard. This post gives a good overview of common geometry errors as defined by the OGC standard.
Overview of the task¶
We will work with an admin boundary layer for India and fix a geometry error for a state polygon.
Other skills you will learn¶
-
Using the Topological Coloring algorithm to apply a coloring scheme to a polygon layer.
Get the data¶
Datameet provides community-created administrative boundary shapefiles for India.
Download the Datameet Spatial Data Repository [~150 MB] zipfile. The downloaded archive contains multiple folders. Extract the archive and use the files in the States/
folder.
Data Source: [DATAMEET]
Procedure¶
-
Browse to the downloaded
India-States.zip
file in QGIS Browser. Expand it and drag theIndia-States.shp
file to the map canvas.
-
You will see a new
India-States
layer loaded in the Layers panel. Go to .
-
We will attemp to run a processing algorithm on the input layer to demonstrate how invalid geometries can cause problems during geoprocessing operations. Search for and locate the algorithm. Double-click to launch it.
-
In the Topological coloring dialog, select
India-States
as the Input layer. Keep all other parameters to default and click Run.
Note
The Topological coloring algorithm implements an algorithm to color a map so that no adjacent polygons have the same color. This is a useful cartography technique and the Four Color Theorem states that 4 colors are enough to achieve this result. There is a graph-theory version of this thorem called Five color theorem. The QGIS algorithm implementation is based on graphs so in practive you will see that complex polygon layers such as this will require upto 5 colors.
-
As the algorithm runs, you will see a warning displayed in the Log tab. 1 feature in the input layer had invalid geometry and was skipped during the processing. The default setting to handle invalid geometry in the Processing Toolbox is located at and is set to
Skip (ignore) features with invalid geometries
. This is a good default setting, but if your input is large, you may miss this warning and may not know that an input feature was skipped. You may want to change the value toStop algorithm execution when a geometry is invalid
.
-
Back in the main QGIS window, you will see a new layer
Colored
added to the Layers panel. Notice that the new layer is missing a state which had invalid geometry. We now know that this particular state polygon had invalid geometry but we don’t know what was the cause. We can easily find that out. Search for and locate the algorithm.
-
In the Check Validity dialog, select
India-States
as the Input layer. SelectGEOS
as the Method. Click Run.
-
As the algorithm finishes processing, you will see 3 new layers in the Layers panel –
Valid output
,Invalid output
andError output
. The layerError output
contains the locations and description of the geometry errors. Right-click it and select Open Attribute Table.
-
You will see that the error message is Ring self-intersection. Select the row and click Zoom map to selected features button. As you zoom in, you will see the root cause of the geometry error.
-
QGIS comes with a built-in algorithm to fix geometry errors automatically. Search for and locate the algorithm. Double-click to run it.
-
In the Fix Geometries dialog, select
India-States
as the Input layer and click Run.
-
A new layer
Fixed Geometries
will be added to the Layers panel. At this point, the geometry error is fixed and you can run any processing algorithm on this layer without problems. But we can see that there is still a gap between the adjacent polygons that is unexpected and can cause topological errors down the line. We can fix this too by editing the polygon. Click the Toggle Editing button in the Digitizing Toolbar. Select the Vertex Tool and from the drop-down selectVertex Tool (Current Layer)
.
-
When the vertex tool is active, click on a vertex to select it. You can press Delete key to delete a vertex or drag it to move it. You can move the vertex so that the polygon edge now touches the adjacent polygon.
-
Once done, click the Toggle Editing button again and click Save.
-
Let’s run the algorithm again.
-
In the Topological Coloring dialog, make sure you select
Fixed Geometries
as the Input layer. Click Run.
-
You will see the algorithm run without any errors and a new layer
Colored
will be added to the Layers panel. Note that the algorithm doesn’t color the layer by itself, but works by adding a new column calledcolor_id
to each polygon that can be used to assign a unique color that is different than adjacent polygons. Select theColored
layer and click the Open the Layer Styling Panel button.
-
Select
Categorized
renderer and the columncolor_id
as the Value. Click Classify. You will now see the map colored so that adjacent polygons have different colors.
comments powered by
Стандартный набор инструментов в QGIS позволяет решить множество базовых задач при обработке геоданных, не прибегая к помощи плагинов или интегрированных в QGIS инструментов других программ. Ниже представлен перечень наиболее востребованных инструментов для обработки векторных геоданных.
1. Удаление пустот внутри полигонов
При оцифровке растровых слоёв векторные часто создаются с изъянами. Один из таких изъянов – пустоты внутри полигона, который должен быть сплошным.
Инструмент “Удалить кольцо” актуален, когда таких колец не более десятка, но если их сотни, то нужен инструмент, способный удалить все пустоты сразу. Для этого в инструментах анализа находим инструмент “Удалить дырки”.
В открытом окне выбираем слой с пустотами и выполняем. Появится новый очищенный слой.
2. Нумерация объектов натуральными числами
Создав слой случайных или регулярных точек, программа автоматически присвоит им порядковый номер. Проблема в том, что нумерация начинается с 0, в то время как чаще всего нумерация нужна с 1.
Исправить это можно через калькулятор полей, размещённый на верхней панели в окне таблицы атрибутов. В калькуляторе выбираем “Создать новое поле” или “Обновить существующее”. Вписываем выражение для натуральной нумерации @row_number и выполняем.
В результате появилась колонка с натуральной нумерацией объектов.
3. Упрощение объектов, сглаживание углов
Необходимость сгладить острые углы также часто возникает после оцифровки растровых данных, когда векторному слою передались квадратные контуры пикселей, либо оцифрованный объект получился слишком угловатым.
На панели оцифровки выбираем “Упростить объект”.
Чтобы одни углы не сменить на другие, в строке “Смещение” надо выбрать подходящий процент.
Меандры сгладились. Более подробно применении инструмента сглаживания при векторизации малого водного объекта описано в этой статье.
4. Игнорирование ошибок геометрии
После векторизации растровых слоёв выходной слой может содержать неверные геометрии – наложение объектов друг на друга, самопересечение полигонов или линий. При решении ряда задач нет надобности исправлять эти ошибки, но их наличие останавливает работу некоторых алгоритмов, делая невозможной дальнейшую работу с таким слоем.
Количество неверных геометрий можно вычислить, но их могут быть сотни, поэтому нужен способ, который позволит игнорировать ошибки.
Заходим в “Параметры” во вкладке “Установки”. На панели слева переходим в раздел “Анализ”. В нём открываем вкладку “Общие улучшения”.
В параметре “Фильтрация некорректных объектов” будет установлено “Останавливать работу инструмента при некорректной геометрии”. Надо заменить на значение “Не фильтровать”.
5. Проверка топологии
Но если нужно таки выявить неверные геометрии, именуемые иначе ошибками топологии, для их дальнейшего устранения, есть инструмент “Проверка топологии”, расположенный во вкладке “Вектор”. Если его там нет, его нужно включить в разделе “Модули”.
Имеется слой, в котором нужно выявить ошибки.
После запуска инструмента, справа появится панель, на которой надо задать правила выявления ошибок. Чтобы это сделать, жмём на обведённую красным цветом кнопку и задаём одно или несколько правил.
ОК и жмём кнопку “Проверить всё”. Ошибки отмечаются красным цветом.
6. Вершины и центроиды полигонов, пересечения линий, координаты точек
- Получение вершин полигонального слоя в виде точек: “Вектор – Обработка геометрии – Извлечь вершины”.
- Получение центроидов полигонов в виде точек: “Вектор – Обработка геометрии – Центроиды”.
- Получение точек пересечения линий как внутри одного слоя, так и между разными линейными слоями: “Вектор – Анализ – Пересечение линий”.
- Определение координат точек: “Вектор – Обработка геометрии – Добавить атрибуты геометрии”. Важно учитывать проекцию, в которой производится расчёт.
- Определение количества точек в полигональном слое: “Вектор – Анализ – Подсчитать точки в полигоне”.
- Определение длины всех линий одного слоя: “Вектор – Анализ – Сумма расстояний”.
7. Выбор объектов в пределах полигона
Имеется полигон и объекты. Нужно отсечь объекты, находящиеся за пределами основного полигона.
“Вектор – Выборка – Выбрать по пространственному отношению”. Сперва отберём точки.
“Выбрать объекты в слое” – это те объекты, которые должен содержать основной полигон – точки. А “Объекты из слоя для сравнения” – это сам полигон, в пределах которого должны быть выбраны точки. Для данной операции достаточно оператора intersect.
Точки внутри полигона выделены. Остаётся сохранить выделенные объекты отдельным слоем. Контекстное меню: “Экспорт – Сохранить выбранные объекты как”.
Далее выделим полигоны. Нам нужны те полигоны, которые пересекают основной, но при этом чтобы они не обрезались по контуру основного полигона.
Вместо точек выбираем полигональный слой. Дополнительно ставим галочку на операторе cross, чтобы выделились объекты как внутри основного полигона, так и те, которые пересекли его, но не вошли полностью.
Если линии и полигоны нужно выделить таким образом, чтобы их части, находящиеся за пределами основного полигона, автоматически отсеклись, применяется другой инструмент: “Вектор – Геообработка – Обрезать”.
Исходный слой – слой, который надо обрезать. Оверлейный слой – основной полигон, в пределах которого должна быть произведена обрезка.
После выполнения алгоритма линии, находящиеся за пределами основного полигона, отсеклись.
8. Матрица расстояний
Имеется один или два точечных слоя. Необходимо рассчитать расстояние между всеми точками внутри одного слоя или между точками разных слоёв.
На полигоне шириной около 345 км размещены два точечных слоя, в каждом по восемь точек.
“Вектор – Анализ – Матрица расстояний”. Открыв инструмент, указываем точечные слои, расстояние между точками которых хотим определить, также указываем атрибутивное поле с нумераций и выполняем.
Создаётся единый точечный слой, содержащий 64 объекта (8*8), где указаны расстояния между всеми точками. Из таблицы атрибутов следует, что между точками №4 наименьшее расстояние.
Поскольку каждая точка одного слоя соединена с каждой точкой другого, каждый объект нового слоя включает не одну точку, а пару. Если начать перемещать точки нового слоя, они будут перемещаться парно. И выделяются они тоже парно. То, что выглядит как одна точка, на самом деле восемь точек, наложенных друг на друга. Новый слой – это не 64 точки, это 64 пары точек.
Инструмент подходит для тех случаев, когда нужно рассчитать, например, удалённость населённых пунктов от административного центра.
9. Увеличение количества узлов в линиях и полигонах
“Вектор – Обработка геометрии – Уплотнить по количеству”. В окне инструмента можно задать количество узлов, которое должно добавиться между узлами исходного слоя. В результате форма объекта не изменится, но количество узлов для редактирования между каждым исходным узлом увеличится на заданное число.
10. Взрыв линии, преобразование линий в полигоны
Эта линия является единым объектом. Взрыв линии создаст слой с отдельными линейными объектами, разорвав исходный на узлах. В панели инструментов анализа инструмент так и называется “Взорвать линии”.
Имеется линейный слой, на основе которого надо создать полигоны.
Инструмент “Преобразовать линии в полигоны” во вкладке “Вектор” в “Обработке геометрии” не сработает. Предположительно, причина в том, что все вертикальные и горизонтальные линии снизу и справа переходят в открытые полигоны. При запуске алгоритма из-за этих открытых полигонов возникнет ошибка, результат некорректный.
Взорвать линии также не удастся, потому что у каждой линии в данном случае всего по два узла – начало и конец. Уплотнить по количеству узлов тоже нельзя, поскольку длина открытых отрезков может различаться. Это приведёт к тому, что места новых узлов на вертикальных и горизонтальных линиях не совпадут.
В версии QGIS 3.16.1 выполнить задачу удалось с помощью инструмента “Построить полигоны”, найденного в панели инструментов анализа.
Открытые полигоны и наложения одних линий на другие в этом инструменте не становятся причиной ошибок, как в инструменте “Преобразовать линии в полигоны”.
Читайте нас в Telegram и ВКонтакте